func_code_string: #include <bits/stdc++.h>   using namespace std;   const int oo = 0x3f3f3f3f;   int f[1 << 23], pre[1 << 23], zt[1 << 23], tot, ans[23];   int n, fn[23], fri[23][23];   int tans[23], Ans[23][23];   void Solve(int o) {     int ni, st = 1 << (o - 1), ed = (1 << n) - 1;     for (int i = (1); i <= (int)(fn[o]); ++i) st |= 1 << (fri[o][i] - 1);     memset(f, oo, sizeof(f));     f[st] = 1;     for (int i = (st); i <= (int)(ed); ++i) {       if (f[i] == oo) continue;       for (int j = (1); j <= (int)(n); ++j)         if (i & (1 << (j - 1))) {           ni = i;           for (int k = (1); k <= (int)(fn[j]); ++k) ni |= 1 << (fri[j][k] - 1);           if (f[ni] > f[i] + 1) {             f[ni] = f[i] + 1;             pre[ni] = i;             zt[ni] = j;           }         }     }     int now = ed, tp = 0;     while (now != st) {       ans[++tp] = zt[now];       now = pre[now];     }     Ans[o][tans[o] = 1] = o;     while (tp) Ans[o][++tans[o]] = ans[tp--];   }   int main() {     int m, u, v;     scanf( %d%d , &n, &m);     if (m == n * (n - 1) / 2) {       puts( 0 );       puts(  );       return 0;     }     int mx = 0;     for (int i = (1); i <= (int)(m); ++i) {       scanf( %d%d , &u, &v);       fri[u][++fn[u]] = v;       fri[v][++fn[v]] = u;       mx = max(mx, max(fn[u], fn[v]));     }     int mn = n + 1, id;     for (int i = (1); i <= (int)(n); ++i) {       Solve(i);       if (fn[i] < mx - 6) continue;       if (tans[i] < mn) mn = tans[i], id = i;     }     printf( %d n , tans[id]);     for (int i = (1); i <= (int)(tans[id]); ++i)       printf( %d%c , Ans[id][i], i == tans[id] ?   n  :    );     return 0;   }   