func_code_string: #include <bits/stdc++.h>   using namespace std;   bool As;   char c;   int n, m, k;   inline void read(int& a) {     a = 0;     do c = getchar();     while (c <  0  || c >  9 );     while (c <=  9  && c >=  0 ) a = (a << 3) + (a << 1) + c -  0 , c = getchar();   }   int Min[1211];   double A[11][11];   bool Has[11][11];   const double eps = 1e-7;   int Matrix(int n) {     int o = 1;     double res = 1;     if (n < 0) return 0;     for (int i = 0; i < n; i++) {       int j = -1;       for (int t = i; t < n; t++)         if (((A[t][i]) > 0 ? (A[t][i]) : -(A[t][i])) > eps) {           j = t;           break;         }       if (j ^ i) o ^= 1;       if (j == -1) return 0;       for (int t = 0; t < n; t++) swap(A[j][t], A[i][t]);       for (int j = i + 1; j < n; j++)         if (((A[j][i]) > 0 ? (A[j][i]) : -(A[j][i])) > eps) {           double U = A[j][i] / A[i][i];           for (int k = 0; k < n; k++) A[j][k] -= U * A[i][k];         }       res *= A[i][i];     }     if (o)       return res + 0.1;     else       return -res + 0.1;   }   int Build(int S) {     vector<int> Q;     Q.clear();     memset(A, 0, sizeof(A));     while (S) Q.push_back(Min[S]), S ^= 1 << Min[S];     for (int i = 0; i < Q.size(); i++)       for (int j = 0; j < i; j++)         if (Has[Q[i]][Q[j]]) A[i][j]--, A[j][i]--, A[j][j]++, A[i][i]++;     return Q.size() - 1;   }   int Cnt[2002];   int Pow(int a, int x) {     int res = 1;     for (x; x; x >>= 1, a = a * a)       if (x & 1) res = res * a;     return res;   }   int F[2002];   int G[2002];   int main() {     Min[0] = -1;     for (int i = 1; i < 1024; i++)       Cnt[i] = (i & 1) ? Cnt[i >> 1] + 1 : Cnt[i >> 1],       Min[i] = (i & 1) ? 0 : (Min[i >> 1] + 1);     read(n), read(m), read(k);     while (m--) {       int a, b;       read(a), read(b);       a--, b--;       Has[b][a] = Has[a][b] = true;     }     int t = 1 << n;     t--;     for (int i = 1; i <= t; i++) {       int W = 1;       for (int j = 0; j < n; j++)         if ((1 << j) & i) {           int f = 0;           for (int k = 0; k < n; k++)             if (!(i & (1 << k)))               if (Has[j][k]) f++;           W *= f;         }       int df;       G[i] = F[i] = W * (df = Matrix(Build(t ^ i)));     }     int Ans = 0;     for (int i = t; ~i; i--) {       if (Cnt[i] == k) Ans += G[i];       int j = (i - 1) & i;       while (j) {         G[j] += (Cnt[j ^ i] & 1 ? -1 : 1) * F[i];         j = i & (j - 1);       }     }     cout << Ans << endl;     return 0;   }   