#include using namespace std; #define all(x) begin(x), end(x) #define sz(x) (ll)(x).size() using ll = long long; using ld = long double; constexpr ll MOD = 1'000'003; vector inv(MOD); ll n, r; vector> in, adj, mat; mt19937 rng(1234567890); constexpr ll powMod(ll a, ll b, ll n) { ll res = 1; while (b > 0) { if (b & 1) res = (a * res) % n; a = (a * a) % n; b /= 2; } return res; } void normalLine(int line) { ll factor = inv[mat[line][line]]; for (ll& x : mat[line]) x = (x * factor) % MOD; } void takeAll(int n, int line) { for (int i = 0; i < n; i++) { if (i == line) continue; ll diff = mat[i][line]; for (int j = 0; j < n; j++) { mat[i][j] -= (diff * mat[line][j]) % MOD; mat[i][j] = (mat[i][j] + MOD) % MOD; }}} bool gauss(int n) { vector done(n, false); for (int i = 0; i < n; i++) { int j = 0; while (j < n && (done[j] || mat[j][i] == 0)) j++; if (j == n) return false; swap(mat[i], mat[j]); normalLine(i); takeAll(n, i); done[i] = true; } return true; } bool solve() { uniform_int_distribution dist(1, MOD); mat.assign(2*n, vector(2*n)); for (ll i = 0; i < 2*n; i++) { for (ll j = i+1; j < 2*n; j++) { bool skip = false; for (ll k = 0; k < r && !skip; k++) { skip |= (in[k][i] > n) == (in[k][j] > n); } if (!skip) { mat[i][j] = dist(rng); mat[j][i] = MOD - mat[i][j]; } } } return gauss(2*n); } int main(int argc, char *argv[]) { ios_base::sync_with_stdio(false); cin.tie(nullptr); for (ll i = 1; i < MOD; i++) inv[i] = powMod(i, MOD - 2, MOD); cin >> n >> r; in.assign(r, vector(2*n)); for (auto& v : in) { for (auto& x : v) cin >> x; } if (!solve()) cout << "im"; cout << "possible" << endl; }