func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 14;   const int Q = 101;   int n, m, q;   long long dp[N][1 << N];   bool edge[N][N];   int a[Q], b[Q], c[Q];   int lowbit(int x) { return x & (-x); }   int in(int i, int S) { return ((S >> i) & 1); }   bool check(int u, int k) {     for (int i = 0; i < n; i++)       if (i != u) {         for (int j = 0; j < n; j++)           if (j != u)             if (edge[i][j] && (in(i, k) ^ in(j, k))) return false;       }     return true;   }   long long DP(int u, int S) {     if (dp[u][S] != -1) return dp[u][S];     dp[u][S] = 0;     int status = S - (1 << u);     int t;     for (t = 0; t < n; t++)       if (in(t, status)) break;     for (int k = status; k; k = (k - 1) & status)       if (in(t, k)) {         if (!check(u, k)) continue;         int v, cnt = 0;         for (int i = 0; i < n; i++) {           if (edge[u][i] && in(i, k)) {             cnt++;             v = i;           }         }         if (cnt >= 2) continue;         bool flag = true;         for (int i = 1; i <= q; i++) {           if (c[i] == u && in(a[i], k) && in(b[i], k)) {             flag = false;             break;           }           if (in(c[i], k) && (!in(a[i], k) || !in(b[i], k))) {             flag = false;             break;           }         }         if (!flag) continue;         if (cnt == 1) {           dp[u][S] += DP(v, k) * DP(u, S - k);         } else {           for (v = 0; v < n; v++)             if (in(v, k)) dp[u][S] += DP(v, k) * DP(u, S - k);         }       }     return dp[u][S];   }   int main() {     scanf( %d%d%d , &n, &m, &q);     for (int i = 1; i <= m; i++) {       int x, y;       scanf( %d%d , &x, &y);       x--, y--;       edge[x][y] = edge[y][x] = true;     }     for (int i = 1; i <= q; i++) {       scanf( %d%d%d , &a[i], &b[i], &c[i]);       a[i]--;       b[i]--;       c[i]--;     }     memset(dp, -1, sizeof(dp));     for (int i = 0; i < n; i++) dp[i][1 << i] = 1;     printf( %lld , DP(0, (1 << n) - 1));     return 0;   }   