#include <bits/stdc++.h>
using namespace std;
constexpr int MAXN = 500;
constexpr int INF = 1e6;
int n;
int p = 0;
array<array<bool, MAXN>, MAXN> a;
array<int, MAXN> parent, t;
int start(int N, bool A[MAXN][MAXN]) {
n = N;
vector<bitset<MAXN>> b(n);
for (int u = 0; u < n; u++) {
for (int v = 0; v < n; v++) {
a[u][v] = A[u][v];
b[u][v] = a[u][v];
}
b[u][u] = 1;
}
vector<bool> removed(n);
bool changed = true;
int timer = 0;
while (changed) {
changed = false;
for (int u = 0; u < n; u++) {
if (removed[u]) continue;
for (int v = 0; v < n; v++) {
if (u == v || removed[v]) continue;
if ((b[u] & b[v]) == b[u]) {
removed[u] = true;
parent[u] = v;
changed = true;
t[u] = timer++;
for (int w = 0; w < n; w++) {
b[w][u] = 0;
}
break;
}
}
if (changed) break;
}
}
p = -1;
for (int u = 0; u < n; u++) if (!removed[u]) {
p = u;
t[u] = timer;
break;
}
return p;
}
int nextMove(int r) {
if (a[p][r] || p == r) return p = r;
int pr = r;
while (t[pr] < t[p])
pr = parent[pr];
return p = pr;
}