const int N = 20;
int c[N][N]; // graph
bitset<N> is[1 << N]; // 2^n * n бит памяти
// bool f[A][B]; <=> bitset<B> f[A];
void calc() {
forn(i, n)
is[1 << i][i] = 1;
forn(A, 1 << n)
forn(i, n)
if (is[A][i])
forn(j, n)
if (c[i][j])
is[A | (1 << j)][j] = 1;
}
void get_answer() { // ham path
int all = (1 << n) - 1;
forn(v, n) // [all, v]
if (is[all][v]) {
int u = 0, A = all ^ (1 << v);
while (!(is[A][u] && c[u][v]))
u++;
v = u, all = A;
}
}