#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
const long double EPS = 1e11;
const long long INFL = 1e16;
const int INF = 1e9 + 7;
long long mul(long long a, long long b) { return (a * b) % MOD; }
long long add(long long& a, long long b) {
  long long ans = a + b;
  while (ans >= MOD) {
    ans -= MOD;
  }
  return ans;
}
long long sub(long long& a, long long b) { return add(a, MOD - b); }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int n;
  cin >> n;
  vector<long long> a(n - 1);
  for (int i = 0; i < n - 1; ++i) {
    cin >> a[i];
  }
  vector<long long> mad(n, 1), mid(n, 1), eqd(n, 0), leqd(n, 0);
  for (int k = 1; k <= n * 2 - 2; ++k) {
    vector<long long> nmad(n, 0), nmid(n, 0), neqd(n, 0), nroo(n, 0);
    if (k == 1) {
      nmid[0] = a[0];
      nroo[0] = a[0];
      for (int i = 1; i < n - 1; ++i) {
        nmad[i] = nmid[i - 1];
        nmid[i] = mul(nmid[i - 1], a[i]);
      }
      nmad[n - 1] = nmid[n - 2];
      mid = move(nmid);
    } else {
      if (k == 2) {
        for (int i = 1; i < n; ++i) {
          neqd[i] = mul(mul(mid[i - 1], a[i - 1] - 1), 500000004LL);
        }
      } else {
        for (int i = 1; i < n; ++i) {
          neqd[i] = mul(leqd[i - 1], mul(a[i - 1], a[i - 1]));
        }
      }
      for (int i = 1; i < n; ++i) {
        nmad[i] = mul(mad[i - 1], a[i - 1]);
        nmad[i] = add(nmad[i], mul(mul(eqd[i - 1], a[i - 1]), 2LL));
      }
    }
    leqd = move(eqd);
    eqd = move(neqd);
    mad = move(nmad);
    long long ans = 0;
    for (int i = 0; i < n; ++i) {
      ans = add(ans, mad[i]);
      ans = add(ans, eqd[i]);
    }
    cout << ans << " ";
  }
  return 0;
}
