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;
    }      
}