func_code_string: #include <bits/stdc++.h>   using namespace std;   int i, j, m, n, u, v;   long long a[15], mod, lose[14][16389], f[16389], g[16389][15];   long long sz[16389], inv[16389];   long long getinv(long long a, long long p) {     if (a == 1) return 1;     long long k = a - getinv(p % a, a);     return (k * p + 1) / a;   }   long long group_lose(int v, int u) {     int i, j;     long long ret;     ret = f[v] * f[u - v] % mod * g[u - v][sz[v]] % mod * inv[u] % mod;     return ret;   }   int main() {     mod = 1000000007;     scanf( %d , &n);     for (i = 0; i <= n - 1; i++) {       scanf( %lld , &a[i]);     }     for (u = 0; u <= (1 << n) - 1; u++) {       sz[u] = 0;       for (i = 0; i <= n - 1; i++)         if (u & (1 << i)) sz[u]++;     }     for (u = 0; u <= (1 << n) - 1; u++) {       f[u] = 1;       for (i = 0; i <= n - 1; i++)         if (u & (1 << i)) {           for (j = i + 1; j <= n - 1; j++)             if (u & (1 << j)) {               f[u] = f[u] * (a[i] + a[j]) % mod;             }         }       inv[u] = getinv(f[u], mod);     }     for (u = 0; u <= (1 << n) - 1; u++) {       g[u][0] = 1;       g[u][1] = 1;       for (i = 0; i <= n - 1; i++)         if (u & (1 << i)) {           g[u][1] = g[u][1] * a[i] % mod;         }       for (i = 2; i <= n; i++) {         g[u][i] = g[u][i - 1] * g[u][1] % mod;       }     }     for (u = 0; u <= (1 << n) - 1; u++) {       for (i = 0; i <= n - 1; i++) {         if (u & (1 << i)) {           lose[i][u] = 0;           for (v = u; v; v = (v - 1) & u)             if ((v != u) && (v & (1 << i))) {               long long temp = group_lose(v, u);               lose[i][u] += (1 - lose[i][v] + mod) * temp % mod;             }           lose[i][u] %= mod;         }       }     }     long long ans = 0;     for (i = 0; i <= n - 1; i++) {       ans += (1 - lose[i][(1 << n) - 1] + mod);     }     ans %= mod;     printf( %lld n , ans);     return 0;   }   