func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, k;   struct Edge {     int u;     int v;   } e[1000000];   int dp[3000][3000];   bool Judge1(int x, int y) {     for (int i = 0; i < n; i++)       if (!(x & (1 << i)) && (y & (1 << i))) return false;     return true;   }   bool Judge2(int u, int v, int x, int y) {     if ((1 << (u - 1)) & x && !((1 << (v - 1)) & x)) return true;     return false;   }   int Count(int x) {     int ret = 0;     for (int i = 0; i < n; i++)       if ((1 << i) & x) ret++;     return ret;   }   void PUT(int x) {     for (int i = 0; i < n; i++)       if (x & (1 << i))         cout << 1;       else         cout << 0;   }   int ans;   int main() {     cin >> n >> m >> k;     for (int i = 1; i <= m; i++) {       cin >> e[i].u >> e[i].v;       int temp = 0;       temp |= (1 << (e[i].u - 1));       temp |= (1 << (e[i].v - 1));       dp[temp][temp] = 1;     }     for (int i = 0; i <= (1 << n) - 1; i++)       for (int j = 0; j <= (1 << n) - 1; j++)         if (Judge1(i, j))           for (int g = 1; g <= m; g++) {             if (Judge2(e[g].u, e[g].v, i, j)) {               int temp = j;               temp |= (1 << (e[g].v - 1));               if (temp & (1 << (e[g].u - 1))) temp ^= (1 << (e[g].u - 1));               bool pd = false;               for (int q = e[g].v + 1; q <= n; q++)                 if ((1 << (q - 1)) & temp) {                   pd = true;                   break;                 }               int st = i;               st |= 1 << (e[g].v - 1);               if (!pd) dp[st][temp] += dp[i][j];             } else if (Judge2(e[g].v, e[g].u, i, j)) {               swap(e[g].v, e[g].u);               int temp = j;               temp |= (1 << (e[g].v - 1));               if (temp & (1 << (e[g].u - 1))) temp ^= (1 << (e[g].u - 1));               bool pd = false;               for (int q = e[g].v + 1; q <= n; q++)                 if ((1 << (q - 1)) & temp) {                   pd = true;                   break;                 }               int st = i;               st |= 1 << (e[g].v - 1);               if (!pd) dp[st][temp] += dp[i][j];             }           }     for (int i = 0; i <= (1 << n) - 1; i++)       for (int j = 0; j <= (1 << n) - 1; j++) {         if (Count(j) == k && (i == ((1 << n) - 1))) ans += dp[i][j];       }     cout << ans << endl;     return 0;   }   