func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, q;   long long dp[15][(1 << 13) + 10][15];   struct E {     int a, b;   } e[20];   struct Lca {     int a, b, c;   } lca[100 + 10];   int num[(1 << 13) + 10];   bool il(int u, int state, int last) {     for (int i = 1; i <= q; i++) {       int xx = ((state >> lca[i].a - 1) & 1) + ((state >> lca[i].b - 1) & 1) +                ((state >> lca[i].c - 1) & 1);       if (xx == 2 && (u != lca[i].c || last == 0))         return true;       else if (xx == 1 && ((state >> lca[i].c - 1) & 1) && last == 0)         return true;       else if (xx == 3 && (u == lca[i].a || u == lca[i].b) && u != lca[i].c)         return true;     }     for (int i = 1; i <= m; i++) {       int xx = ((state >> e[i].a - 1) & 1) + ((state >> e[i].b - 1) & 1);       if (xx == 1 && u != e[i].a && u != e[i].b) return true;     }     return false;   }   long long dfs(int u, int state, int last) {     if (dp[u][state][last] != -1) return dp[u][state][last];     dp[u][state][last] = 0;     if (il(u, state, last)) return dp[u][state][last];     if (num[state] == 1) {       return dp[u][state][last] = 1;     }     int full = state ^ (1 << u - 1);     for (int x = full; x; x = (x - 1) & full) {       int ok = true;       int y = full ^ x;       for (int i = 1; i <= m; i++) {         if ((((x >> (e[i].a - 1)) & 1) && ((y >> (e[i].b - 1)) & 1)) ||             (((y >> (e[i].a - 1)) & 1) && ((x >> (e[i].b - 1)) & 1))) {           ok = false;           break;         }       }       if (!ok) continue;       for (int i = last + 1; i <= n; i++)         if ((x >> (i - 1)) & 1)           dp[u][state][last] += dfs(u, y | (1 << u - 1), i) * dfs(i, x, 0);     }     return dp[u][state][last];   }   int main() {     scanf( %d%d%d , &n, &m, &q);     for (int i = 1; i <= m; i++) {       scanf( %d%d , &e[i].a, &e[i].b);     }     for (int i = 1; i <= q; i++) {       scanf( %d%d%d , &lca[i].a, &lca[i].b, &lca[i].c);     }     for (int i = 0; i < (1 << n); i++) {       int x = i;       while (x) {         num[i] += x & 1;         x >>= 1;       }     }     memset(dp, -1, sizeof(dp));     printf( %I64d n , dfs(1, (1 << n) - 1, 0));     return 0;   }   