#include <bits/stdc++.h>
using namespace std;
const int N = 5e3 + 10;
const int NN = 1e4 + 10;
const int MOD = 1e9 + 7;
int add(int a, int b) {
  return ((long long int)a + (long long int)b + MOD) % MOD;
}
int mul(int a, int b) { return ((long long int)a * (long long int)b) % MOD; }
int pow(int a, int b) {
  int ret = 1;
  while (b) {
    if (b & 1) ret = mul(ret, a);
    b >>= 1;
    a = mul(a, a);
  }
  return ret;
}
int rev(int n) { return pow(n, MOD - 2); }
int s[N], ans, now, r2 = rev(2), m[N], S[N], bo[NN][N];
int main() {
  int n, tot;
  vector<int> v;
  scanf("%d", &n);
  tot = (n << 1) - 2;
  s[1] = 1;
  S[1] = 1;
  for (int i = 2; i <= n; i++) {
    scanf("%d", &s[i]);
    s[i] = mul(s[i], s[i - 1]);
    S[i] = add(S[i - 1], s[i]);
    m[i - 1] = mul(mul(add(s[i], -s[i - 1]), rev(mul(s[i], s[i - 1]))), r2);
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) bo[i + j][i] = mul(s[i], s[j]);
  for (int i = 1; i < NN; i++)
    for (int j = 1; j < N; j++) bo[i][j] = add(bo[i][j - 1], bo[i][j]);
  m[n] = 0;
  for (int i = 1; i <= tot; i++) {
    ans = i < n ? add(S[n], -S[i]) : 0;
    for (int j = 1; j <= n; j++) {
      now = (((j << 1) + i) < NN)
                ? j + i - 1 < N
                      ? add(bo[(j << 1) + i][j + i - 1], -bo[(j << 1) + i][j])
                      : add(bo[(j << 1) + i][N - 1], -bo[(j << 1) + i][j])
                : 0;
      now = mul(now, m[j]);
      ans = add(ans, now);
    }
    v.push_back(ans);
  }
  printf("%d", v[0]);
  for (int i = 1; i < v.size(); i++) printf(" %d", v[i]);
  printf("\n");
}
