#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
inline long long read() {
  long long f = 1, x = 0;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
inline void write(int x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
inline void print(int x) {
  write(x);
  printf(" ");
}
long long pow_mod(long long a, long long b) {
  long long ret = 1;
  while (b) {
    if (b & 1) ret = ret * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return ret;
}
int n;
long long f[2][21100], gg, a[21100];
long long ans[21100], s[21100], inv[21100];
int main() {
  n = read();
  gg = pow_mod(2, mod - 2);
  inv[1] = s[1] = 1;
  inv[0] = 1;
  for (int i = 2; i <= n; i++)
    a[i] = read(), s[i] = s[i - 1] * a[i] % mod,
    inv[i] = pow_mod(s[i], mod - 2);
  int nw = 0;
  a[1] = 1;
  for (int i = n; i >= 1; i--) {
    nw ^= 1;
    memset(f[nw], 0, sizeof(f[nw]));
    for (int j = 2; j <= 2 * n - 4; j++)
      f[nw][j + 2] = f[nw ^ 1][j] * a[i + 2] % mod * a[i + 2] % mod;
    for (int j = 2; j <= 2 * n - 2; j++)
      f[nw][j] = (f[nw][j] + s[i + j - 1] * inv[i + 1] % mod) % mod;
    for (int j = 2; j <= 2 * n - 2; j++) {
      (ans[j] +=
       s[i] * a[i + 1] % mod * (a[i + 1] - 1) % mod * f[nw][j] % mod) %= mod;
      if (!(j % 2) && j / 2 <= n - i)
        ans[j] = (ans[j] -
                  (s[i] * a[i + 1] % mod * (a[i + 1] - 1) % mod * gg % mod *
                   s[i + j / 2] % mod * inv[i + 1] % mod * s[i + j / 2] % mod *
                   inv[i + 1] % mod) +
                  mod) %
                 mod;
    }
    for (int j = 1; j <= n - i; j++) (ans[j] += s[i + j]) %= mod;
  }
  for (int i = 1; i <= 2 * n - 2; i++) printf("%lld ", ans[i]);
  puts("");
  return 0;
}
