func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, ans;   int a[19];   int inv[2000009];   int f[17009];   int tag[19];   int qpow(int a, int b) {     int ans = 1;     for (; b; b >>= 1, a = (long long)a * a % 1000000007)       if (b & 1) ans = (long long)ans * a % 1000000007;     return ans;   }   void init() {     for (int i = 1; i <= 2000000; i++) inv[i] = qpow(i, 1000000007 - 2);   }   int main() {     init();     scanf( %d , &n);     for (int i = 1; i <= n; i++) scanf( %d , a + i);     for (int s = 1; s < (1 << n); s++) {       int sm = 0;       for (int t = (s - 1) & s; t; t = (t - 1) & s) {         int p = s ^ t, pb = 1;         for (int i = 1; i <= n; i++)           if (t >> (i - 1) & 1)             for (int j = 1; j <= n; j++)               if (p >> (j - 1) & 1)                 pb = (long long)pb * a[i] % 1000000007 * inv[a[i] + a[j]] %                      1000000007;         sm = (sm + (long long)f[t] * pb) % 1000000007;       }       f[s] = (1000000007 + 1 - sm) % 1000000007;     }     int ans = 0;     for (int i = 1; i <= n; i++)       for (int s = 1; s < (1 << n); s++)         if (s >> (i - 1) & 1) {           int pb = 1;           for (int i = 1; i <= n; i++)             if (s >> (i - 1) & 1)               for (int j = 1; j <= n; j++)                 if (!(s >> (j - 1) & 1))                   pb = (long long)pb * a[i] % 1000000007 * inv[a[i] + a[j]] %                        1000000007;           ans = (ans + (long long)f[s] * pb) % 1000000007;         }     printf( %d , ans);     return 0;   }   