func_code_string: #include <bits/stdc++.h>   int start, n, m;   bool edge[25][25];   long long memory[25][(1 << 19) + 5];   long long dfs(int u, int mask) {     if (memory[u][mask] != -1) return memory[u][mask];     int visit = 0;     for (int i = 0; i < n; i++) {       if (mask & (1 << i)) visit++;     }     long long result = 0;     if (visit >= 3 && edge[u][start]) result = 1;     for (int v = 0; v <= start; v++) {       if (!edge[u][v]) {         continue;       }       if (mask & (1 << v)) {         continue;       }       result += dfs(v, mask | (1 << v));     }     memory[u][mask] = result;     return result;   }   int main() {     scanf( %d%d , &n, &m);     for (int i = 0; i < m; i++) {       int u, v;       scanf( %d%d , &u, &v);       u--;       v--;       edge[u][v] = edge[v][u] = true;     }     long long answer = 0;     for (start = 0; start < n; start++) {       for (int i = 0; i < n; i++) {         for (int j = 0; j < 1 << n; j++) {           memory[i][j] = -1;         }       }       answer += dfs(start, 1 << start);     }     printf( %lld n , answer / 2);   }   