func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 11;   const int B = 1 << 10;   long long dp[B][B][N];   bool can[N][N];   vector<int> v[N + 1];   int countBits(int n) {     int res = 0;     while (n) {       res += n % 2;       n >>= 1;     }     return res;   }   bool bit(int n, int pos) { return n & (1 << pos); }   int rev(int n, int pos) { return n ^ (1 << pos); }   int main() {     int n, m, k, b, ans = 0;     cin >> n >> m >> k;     for (int i = 0; i < m; i++) {       int v, u;       cin >> v >> u;       v--, u--;       can[v][u] = can[u][v] = 1;     }     b = 1 << n;     for (int i = 0; i < b; i++) v[countBits(i)].push_back(i);     for (int i = 0; i < n; i++)       for (int j = 0; j < n; j++)         if (can[i][j]) {           int add = 0;           add |= 1 << i;           add |= 1 << j;           dp[add][add][2] = 2;         }     for (int i = 2; i < n; i++)       for (int j = 0; j < v[i].size(); j++) {         int mask = v[i][j];         for (int l = 0; l < b; l++) {           int now = dp[mask][l][i];           if (now == 0) continue;           now /= countBits(l);           vector<int> from, to;           for (int x = 0; x < n; x++)             if (bit(mask, x))               from.push_back(x);             else               to.push_back(x);           for (int f = 0; f < from.size(); f++)             for (int t = 0; t < to.size(); t++) {               int v = from[f], u = to[t];               if (!can[v][u]) continue;               if (bit(l, v))                 dp[mask ^ (1 << u)][rev(rev(l, v), u)][i + 1] += now;               else                 dp[mask ^ (1 << u)][rev(l, u)][i + 1] += now;             }         }       }     for (int i = 0; i < v[k].size(); i++) ans += dp[b - 1][v[k][i]][n] / k;     cout << ans;     return 0;   }   