#include <bits/stdc++.h>
using namespace std;
const long long maxn = 5005, mod = 1e9 + 7;
long long n, a[maxn], f[maxn * 2], dp[maxn][maxn], inv[maxn * 2], inv2;
long long qpow(long long x, long long k) {
  long long res = 1;
  for (; k; k >>= 1, x = x * x % mod)
    if (k & 1) res = res * x % mod;
  return res;
}
signed main() {
  scanf("%lld", &n);
  a[1] = f[1] = 1;
  inv2 = qpow(2, mod - 2);
  for (long long i = 2; i <= n; ++i)
    scanf("%lld", &a[i]), f[i] = f[i - 1] * a[i] % mod,
                          inv[i] = qpow(f[i], mod - 2);
  for (long long i = 1; i <= n; ++i) dp[i][i] = f[i + 1] * f[i + 1] % mod;
  for (long long j = 1; j <= n - 1; ++j)
    for (long long i = 1; i <= n - j; ++i)
      dp[i][i + j] =
          (dp[i + 1][i + j - 1] + 2 * f[i + 1] % mod * f[i + j + 1] % mod) %
          mod;
  for (long long k = 1; k <= 2 * n - 2; ++k) {
    long long ans = 0;
    for (long long i = 1; i <= n - 1; ++i)
      if (i + k <= n) ans = (ans + f[i + k]) % mod;
    for (long long i = 1; i <= n - 1; ++i) {
      long long tmp = 0, l = max(1ll, i + k - n), r = min(k - 1, n - i);
      if ((l + i - 1) > (r + i - 1)) continue;
      tmp = dp[l + i - 1][r + i - 1];
      ans += a[i + 1] * (a[i + 1] - 1) % mod * inv2 % mod * tmp % mod * f[i] %
             mod * inv[i + 1] % mod * inv[i + 1] % mod;
      ans %= mod;
    }
    printf("%lld ", ans);
  }
  return 0;
}
