#include <bits/stdc++.h>
using namespace std;
const long long MXN = 5e3 + 10;
const long long MXM = 1e4 + 10;
const long long Mod = 1e9 + 7;
long long power(long long a, long long b) {
  return (!b ? 1 : power(a * a % Mod, b / 2) * (b & 1LL ? a : 1) % Mod);
}
long long inv(long long x) { return power(x, Mod - 2); }
void mkay(long long &x) {
  if (x >= Mod) x -= Mod;
}
void mkay(int &x) {
  if (x >= Mod) x -= Mod;
}
long long n, i2;
long long A[MXN], Ans[MXM];
int sub[MXN][MXN], dp[2][MXM];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n, i2 = inv(2);
  for (int i = 1; i < n; i++) cin >> A[i];
  sub[n][0] = 1;
  for (int i = n - 1; i; i--) {
    sub[i][0] = 1;
    for (int j = 1; j <= n - i; j++) sub[i][j] = A[i] * sub[i + 1][j - 1] % Mod;
  }
  long long ted = 1, s;
  dp[1][0] = 1;
  for (int i = 1; i <= n; i++) {
    if (i >= 2) {
      memset(dp[i & 1LL], 0, sizeof dp[i & 1LL]);
      dp[i & 1LL][0] = 1;
      for (int j = 1; j <= i + n - 2; j++) {
        dp[i & 1LL][j] = dp[(i - 1) & 1LL][j - 1];
        if (j > 1 && j - 2 < MXN) {
          dp[i & 1LL][j] += (A[i - 1] - 1ll) * sub[i][j - 2] % Mod;
        }
        mkay(dp[i & 1LL][j]);
      }
    }
    for (int j = 1; j <= 2 * n - 2; j++) {
      s = (j < MXN ? sub[i][j] : 0);
      Ans[j] += ted * ((dp[i & 1LL][j] + s) % Mod) % Mod;
      mkay(Ans[j]);
    }
    ted *= A[i];
    ted %= Mod;
  }
  for (int i = 1; i <= 2 * n - 2; i++) {
    cout << Ans[i] * i2 % Mod << ' ';
  }
  cout << '\n';
  return 0;
}
