#include #include #include using namespace std; #define MAXN 14 #define MAXSIZE 100000 long long dst[MAXN][MAXN]; int main() { int N; long long L; cin >> N >> L; for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) cin >> dst[i][j]; long long target = (L< cur; cur.insert(0); for(int i = 0; i < N; i++) { set next; for(set::iterator it = cur.begin(); it != cur.end(); it++) { for(int j = 0; j < N; j++) { if(i == j) continue; if((*it) & (1< target) continue; next.insert(nxt); } } // To avoid timelimit, just keep the middle part if(next.size() > MAXSIZE) { vector v = vector(next.begin(), next.end()); v.erase(v.begin(), v.begin() + (v.size() - MAXSIZE) / 2); v.erase(v.begin()+MAXSIZE, v.end()); next = set(v.begin(), v.end()); } cur = next; } cout << (cur.find(target) != cur.end() ? "possible" : "impossible") << endl; return 0; }