#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int N = 10010;
int f[2][N], g[2][N], a[N], ans[N], b[N], pr[N];
inline int qpow(long long a, int b, const int p) {
  int ret = 1;
  a %= p;
  while (b) {
    ret = ret * 1ll * (b & 1 ? a : 1) % p;
    a = a * a % p, b >>= 1;
  }
  return ret;
}
int main() {
  auto _add = [&](int &x, int y) {
    x += y;
    if (x >= mod) x -= mod;
  };
  int n;
  scanf("%d", &n);
  a[1] = 1;
  b[1] = 1;
  const int inv_2 = mod - mod / 2;
  for (int i = 2; i <= n; i++) scanf("%d", &a[i]), b[i] = a[i];
  for (int i = 2; i <= n; i++) b[i] = b[i - 1] * 1ll * b[i] % mod;
  for (int i = n; i >= 2; i--) pr[i] = (pr[i + 1] + b[i]) % mod;
  for (int i = 1; i <= n; i++) {
    f[i & 1][0] = g[i & 1][0] = 1;
    for (int j = 1; j <= n * 2 - 2; j++) {
      f[i & 1][j] = f[i & 1][j - 1] * 1ll * a[i + j] % mod;
      g[i & 1][j] = 0;
      if (j >= 2)
        _add(g[i & 1][j], f[i & 1][j - 2] * 1ll * (a[i] - 1 + mod) % mod);
      _add(g[i & 1][j], g[(i - 1) & 1][j - 1]);
      _add(ans[j], g[i & 1][j] * 1ll * b[i] % mod);
    }
  }
  for (int i = 1; i <= 2 * n - 2; i++) {
    if (i <= n - 1) {
      ans[i] =
          ((ans[i] - pr[1 + i] + mod) % mod * 1ll * inv_2 % mod + pr[1 + i]) %
          mod;
    } else
      ans[i] = ans[i] * 1ll * inv_2 % mod;
  }
  for (int i = 1; i <= 2 * n - 2; i++)
    printf("%d%c", ans[i], i == 2 * n - 2 ? '\n' : ' ');
  return 0;
}
