func_code_string: #include <bits/stdc++.h>   using namespace std;   const double PI = acos(-1.0);   const int INF = 1000 * 1000 * 1000 + 7;   const long long LINF = INF * (long long)INF;   const int L = 22;   int G[L];   int dp[1 << L];   int P[1 << L];   int M[1 << L];   int n;   void print(int mask) {     for (int i = (0); i < (n); i++) {       if (mask & (1 << i)) {         cout <<  1  ;         continue;       }       cout <<  0  ;     }     cout << endl;   }   bool isClik(int mask) {     for (int i = (0); i < (n); i++) {       if ((1 << i) & mask) {         mask ^= 1 << i;         if ((mask & G[i]) != mask) return false;         mask ^= 1 << i;       }     }     return true;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     int m;     cin >> n >> m;     for (int i = (0); i < (m); i++) {       int a, b;       cin >> a >> b;       a--;       b--;       G[a] |= 1 << b;       G[b] |= 1 << a;     }     for (int mask = (0); mask < (1 << n); mask++) {       dp[mask] = INF;     }     for (int mask = (0); mask < (1 << n); mask++) {       if (isClik(mask)) {         dp[mask] = 0;       }     }     for (int mask = (0); mask < (1 << n); mask++) {       for (int k = (0); k < (n); k++) {         if (!(mask & (1 << k))) continue;         if (dp[mask | G[k]] > dp[mask] + 1) {           dp[mask | G[k]] = dp[mask] + 1;           P[mask | G[k]] = k;           M[mask | G[k]] = mask;         }         dp[mask | G[k]] = min(dp[mask | G[k]], dp[mask] + 1);       }     }     int ans = dp[(1 << n) - 1];     cout << ans << endl;     vector<int> res;     int mask = (1 << n) - 1;     for (int i = (0); i < (ans); i++) {       res.push_back(P[mask]);       mask = M[mask];     }     reverse(res.begin(), res.end());     for (int i = (0); i < ((int)res.size()); i++) {       cout << res[i] + 1 <<    ;     }     cout << endl;   }   