#include <bits/stdc++.h>
using namespace std;
int mod = 1e9 + 7;
struct ll {
  int val = 0;
  ll(long long x) { val = x % mod; }
  ll() {}
  inline void operator=(long long x) { val = x % mod; }
  inline void operator+=(long long x) {
    val += x % mod;
    val %= mod;
  }
  inline void operator*=(long long x) {
    val *= x % mod;
    val %= mod;
  }
  operator long long() { return val; }
};
inline ll qpow(ll x, int p) {
  ll ans = 1;
  while (p) {
    if (p & 1) ans = ans * x % mod;
    x = x * x % mod;
    p >>= 1;
  }
  return ans;
}
ll f[5050][10050], ans[10050], a[5050], pre[5050];
ll inv2;
int n;
int main() {
  scanf("%d", &n);
  inv2 = qpow(2, mod - 2);
  pre[0] = 1;
  for (int i = 1; i < n; ++i) {
    scanf("%lld", &a[i]);
    pre[i] = pre[i - 1] * a[i];
  }
  for (int i = n; i >= 1; --i) {
    f[i][0] = 1;
    for (int j = 1; j <= n - i; ++j) {
      f[i][j] += f[i + 1][j - 1] * a[i];
      ans[j] += pre[i - 1] * f[i][j];
    }
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 2 * n + 2; j >= 1; --j) {
      f[i][j] = f[i - 1][j - 1];
      if (i > 1 && j >= 2) f[i][j] += f[i][j - 2] * (a[i - 1] - 1);
      ans[j] += pre[i - 1] * f[i][j];
    }
  }
  for (int i = 1; i <= 2 * n - 2; ++i) {
    printf("%lld ", ans[i] * inv2 % mod);
  }
}
