func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, k, kk;   vector<int> g[10], e[10];   int cnt = 0;   bool used[10] = {}, vis[10] = {};   int usedCnt, visCnt;   long long cur;   int st;   int pc[1024];   void go(int v) {     vis[v] = true, ++visCnt;     vector<int> &f = e[v];     int sz = 0;     for (int x : g[v])       if (!used[x]) {         f[sz++] = x;       }     for (int mask = 0; mask < (int)(1 << sz); ++mask) {       int pcm = pc[mask];       for (int i = 0; i < (int)(sz); ++i)         if (mask & (1 << i)) {           used[f[i]] = true;         }       usedCnt += pcm;       int pos = 0;       while (pos < n && (!used[pos] || vis[pos])) ++pos;       if (pos != n) {         go(pos);       } else {         if (usedCnt == n) ++cur;       }       for (int i = 0; i < (int)(sz); ++i)         if (mask & (1 << i)) {           used[f[i]] = false;         }       usedCnt -= pcm;     }     vis[v] = false, --visCnt;   }   long long ans[15], c[15][15];   int main() {     for (int i = 0; i < (int)(1024); ++i) pc[i] = __builtin_popcount(i);     scanf( %d%d%d , &n, &m, &kk);     for (int i = 0; i < (int)(m); ++i) {       int from, to;       scanf( %d%d , &from, &to), --from, --to;       g[from].push_back(to);       g[to].push_back(from);     }     for (int i = 0; i < (int)(n); ++i) e[i].resize(g[i].size());     for (int i = 0; i < (int)(15); ++i) c[0][i] = 0;     c[0][0] = 1;     for (int i = 1; i < 15; ++i) {       c[i][0] = 1;       for (int j = 1; j < 15; ++j) {         c[i][j] = c[i - 1][j] + c[i - 1][j - 1];       }     }     for (int k = n - 1; k >= kk; --k) {       for (int mask = 0; mask < (int)(1 << n); ++mask)         if (pc[mask] == k) {           for (int i = 0; i < (int)(n); ++i)             vis[i] = used[i] = (mask & (1 << i)) > 0;           st = 0;           while (used[st]) ++st;           if (st == n) break;           usedCnt = k + 1;           visCnt = k;           used[st] = true;           cur = 0;           go(st);           for (int i = 0; i < (int)(n); ++i)             if (mask & (1 << i)) {               int mul = 0;               for (int to : g[i])                 if (!(mask & (1 << to))) {                   ++mul;                 }               cur *= mul;             }           ans[k] += cur;         }       for (int x = n - 1; x > k; --x) {         ans[k] -= ans[x] * c[x][k];       }     }     printf( %d n , (int)ans[kk]);     return 0;   }   