#include <bits/stdc++.h>
using namespace std;
const int maxn = 5005;
const int mod = 1e9 + 7;
int a[maxn * 2];
int prod[maxn * 4];
int cnt(int dep) { return prod[dep - 1]; }
int invp[2 * maxn];
int ksm(int num, int t) {
  int res = 1;
  for (; t; t >>= 1, num = 1ll * num * num % mod) {
    if (t & 1) res = 1ll * res * num % mod;
  }
  return res;
}
int down(int lev, int len) {
  return (1ll * prod[lev + len - 1] * invp[lev - 1] % mod);
}
int dp[maxn][2 * maxn];
int inv[2 * maxn];
int ans[2 * maxn];
int main() {
  ios::sync_with_stdio(0);
  int n;
  cin >> n;
  int lim = 2 * n - 2;
  prod[0] = 1;
  for (int i = (1), iend = (n - 1); i <= iend; i++)
    cin >> a[i], prod[i] = 1ll * prod[i - 1] * a[i] % mod,
                 inv[i] = ksm(a[i], mod - 2);
  for (int i = (0), iend = (n); i <= iend; i++) invp[i] = ksm(prod[i], mod - 2);
  for (int i = (1), iend = (n); i <= iend; i++) dp[i][0] = 1;
  for (int i = (2), iend = (n); i <= iend; i++)
    for (int k = (1), kend = (lim); k <= kend; k++) {
      dp[i][k] = dp[i - 1][k - 1];
      if (k >= 2)
        dp[i][k] = (dp[i][k] + 1ll * down(i - 1, k - 1) * inv[i - 1] % mod *
                                   (a[i - 1] - 1) % mod) %
                   mod;
    }
  int inv2 = ksm(2, mod - 2);
  for (int i = (1), iend = (n); i <= iend; i++)
    for (int j = (1), jend = (lim); j <= jend; j++) {
      ans[j] = (ans[j] + 1ll * (dp[i][j] + down(i, j)) * cnt(i)) % mod;
    }
  for (int i = (1), iend = (lim); i <= iend; i++)
    ans[i] = (1ll * ans[i] * inv2 % mod + mod) % mod;
  for (int i = (1), iend = (lim); i <= iend; i++) cout << ans[i] << ' ';
  return 0;
}
