func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 22;   int cache[1 << N];   int next_element[1 << N];   int already_done(const vector<int>& adj);   int memo(int set, const vector<int>& adj);   int main() {     int n, m;     cin >> n >> m;     vector<int> adj(n);     for (int i = 0; i < m; i++) {       int u, v;       cin >> u >> v;       u--;       v--;       adj[u] |= 1 << v;       adj[v] |= 1 << u;     }     for (int i = 0; i < n; i++) adj[i] |= 1 << i;     if (already_done(adj)) {       cout <<  0 n ;       return 0;     }     cout << memo(0, adj) <<   n ;     int set = 0;     while (cache[set]) {       cout << next_element[set] + 1 <<    ;       int n = next_element[set];       set = set | (1 << n) | adj[n];     }   }   int already_done(const vector<int>& adj) {     int all = (1 << adj.size()) - 1;     for (int i = 0; i < adj.size(); i++)       if (adj[i] != all) {         return false;       }     return true;   }   int memo(int set, const vector<int>& adj) {     if (cache[set]) return cache[set];     int& ret = cache[set] = adj.size();     if (set == (1 << adj.size()) - 1) return ret = 0;     for (int i = 0; i < adj.size(); i++)       if ((set & (1 << i)) && (set | adj[i]) != set || set == 0) {         int next_set = set | (1 << i) | adj[i];         int now = 1 + memo(next_set, adj);         if (now < ret) {           ret = now;           next_element[set] = i;         }       }     return ret;   }   