func_code_string: #include <bits/stdc++.h>   using namespace std;   int expo(int base, int exponent, int mod) {     int ans = 1;     while (exponent != 0) {       if (exponent & 1) ans = (1LL * ans * base) % mod;       base = (1LL * base * base) % mod;       exponent >>= 1;     }     return ans % mod;   }   int n, a[5005], ans[10005], pre[5005], inv[5005];   int up[5005][10005];   int get_down(int l, int r) {     if (l <= 0 or r < 0) return 0;     if (r == 0) return 1;     r = l + r - 1;     if (r >= n) return 0;     return 1LL * pre[r] * inv[l - 1] % 1000000007;   }   void solve() {     cin >> n;     for (int i = 1; i < n; i++) cin >> a[i];     a[0] = pre[0] = inv[0] = 1;     for (int i = 1; i < n + 1; i++)       pre[i] = 1LL * a[i] * pre[i - 1] % 1000000007,       inv[i] = expo(pre[i], 1000000007 - 2, 1000000007);     for (int i = 1; i < n + 1; i++) {       for (int j = 1; j < 2 * n - 1; j++) {         if (i >= 2)           up[i][j] = (0LL + up[i - 1][j - 1] + get_down(i - 1, j - 1) -                       get_down(i, j - 2) + 1000000007) %                      1000000007;         ans[j] = (ans[j] + 1LL * pre[i - 1] * (up[i][j] + get_down(i, j))) %                  1000000007;       }     }     for (int i = 1; i < 2 * n - 1; i++)       cout << 1LL * ans[i] * (1000000007 + 1) / 2 % 1000000007 <<    ;   }   signed main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     int t = 1;     while (t--) {       solve();     }     return 0;   }   