#include <bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
const int N = 5050;
const int mod = 1e9 + 7;
int suf[N << 1], a[N], tab[N << 1], ans[N << 1], n;
inline int Mul(int a, int b) { return (long long)a * b % mod; }
inline int pow(int x) {
  int res = 1;
  for (register int exp = mod - 2; exp; exp >>= 1, x = Mul(x, x))
    if (exp & 1) res = Mul(res, x);
  return res;
}
int main() {
  scanf("%d", &n);
  a[1] = 1;
  for (register int i = 2, x; i <= n; i++) {
    scanf("%d", &x);
    a[i] = Mul(x, a[i - 1]);
  }
  for (register int i = n; i; i--) {
    suf[i] = suf[i + 1] + a[i];
    if (suf[i] >= mod) suf[i] -= mod;
  }
  for (register int i = n - 1; i; i--) {
    tab[i + i + 2] += Mul(Mul(a[i + 1], a[i + 1]), (mod + 1) >> 1);
    if (tab[i + i + 2] >= mod) tab[i + i + 2] -= mod;
    for (register int j = i + 2; j <= n; j++) {
      tab[i + j + 1] += Mul(a[i + 1], a[j]);
      if (tab[i + j + 1] >= mod) tab[i + j + 1] -= mod;
    }
    int val = pow(a[i]) - pow(a[i + 1]);
    if (val < 0) val += mod;
    for (register int j = i + i + 2; j <= n + n; j++) {
      ans[j - i - i] += Mul(tab[j], val);
      if (ans[j - i - i] >= mod) ans[j - i - i] -= mod;
    }
  }
  for (int i = 1; i <= n + n - 2; i++)
    printf("%d ", (ans[i] + suf[i + 1]) % mod);
  puts("");
  return 0;
}
