#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10, skc = 1e9 + 7;
int a[N], s[N], n, ans[2 * N], ts[N], f[2][2 * N];
void upd(int &x, int y) { x = (x + y) % skc; }
int qpow(int A, int B) {
  int C = 1;
  for (; B; B >>= 1, A = 1ll * A * A % skc)
    if (B & 1) C = 1ll * A * C % skc;
  return C;
}
int inv(int x) { return qpow(x, skc - 2); }
int qy(int i, int j) { return 1ll * s[i + j] * ts[i] % skc; }
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  s[1] = ts[1] = 1;
  int lim = 2 * n - 2, nw = 0;
  for (register int i = (2); i <= (n); ++i)
    cin >> a[i], s[i] = 1ll * s[i - 1] * a[i] % skc, ts[i] = inv(s[i]);
  for (register int i = (2); i <= (n); ++i) {
    memset(f[nw], 0, sizeof(f[nw]));
    for (register int j = (1); j <= (lim); ++j) {
      if (j == 1)
        f[nw][j] = 1;
      else {
        f[nw][j] = f[nw ^ 1][j - 1];
        upd(f[nw][j], 1ll * (a[i] - 1) * qy(i, j - 2) % skc);
      }
      upd(ans[j], 1ll * f[nw][j] * s[i] % skc);
    }
    nw ^= 1;
  }
  for (register int i = (1); i <= (n); ++i)
    for (register int j = (i + 1); j <= (n); ++j) upd(ans[j - i], s[j]);
  int tp = inv(2);
  for (register int i = (1); i <= (lim); ++i)
    cout << 1ll * tp * ans[i] % skc << ' ';
  cout << '\n';
  return 0;
}
