func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long N = 20;   long long n, m, dp[N][1 << N], B, res, cb[1 << N];   bool used[N][1 << N], w[N][N];   long long cbit(long long x) {     long long c = 0;     while (x) {       c += x & 1;       x /= 2;     }     return c;   }   signed main() {     ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);     cin >> n >> m;     for (long long i = 0; i < m; ++i) {       long long a, b;       cin >> a >> b;       a--;       b--;       w[a][b] = 1;       w[b][a] = 1;     }     B = 1 << n;     for (long long i = 0; i < B; ++i) cb[i] = cbit(i);     queue<pair<long long, long long>> q;     for (long long i = 0; i < n; ++i) {       for (long long j = 0; j < n; ++j) {         for (long long ma = 0; ma < B; ++ma) {           dp[j][ma] = 0;           used[j][ma] = 0;         }       }       q.push({i, 1 << i});       dp[i][1 << i] = 1;       while (!q.empty()) {         long long v = q.front().first, mask = q.front().second, nmask;         q.pop();         for (long long u = i; u < n; ++u) {           nmask = mask | (1 << u);           if (nmask == mask || !w[u][v]) continue;           dp[u][nmask] += dp[v][mask];           if (!used[u][nmask]) {             used[u][nmask] = 1;             q.push({u, nmask});           }         }       }       long long av = 0;       for (long long j = 0; j < n; ++j) {         for (long long mask = 0; mask < B; ++mask) {           if (cb[mask] >= 3 && w[i][j] && dp[j][mask]) {             av += dp[j][mask];           }         }       }       res += av / 2;     }     cout << res <<   n ;   }   