#include <bits/stdc++.h>
using namespace std;
void Solve() {
  long long n;
  cin >> n;
  vector<long long> a(n);
  for (signed i = 0; i < (n - 1); i++) cin >> a[i];
  a[n - 1] = 0;
  vector<long long> ans(2 * n - 1);
  vector<long long> dp(2 * n - 1);
  long long p = a[0];
  ans[0] = p;
  dp[0] = 1;
  dp[1] = p - 1;
  for (long long i = 1; i < n; ++i) {
    p = (p * a[i]) % 1000000007l;
    ans[i] = p;
    dp[i + 1] = (dp[i] * a[i]) % 1000000007l;
  }
  long long d = 1;
  for (long long i = 1; i < n; ++i) {
    d *= a[i - 1];
    d %= 1000000007l;
    vector<long long> ndp(2 * n - 1);
    p = a[i];
    ans[0] += p * d;
    ans[0] %= 1000000007l;
    ndp[0] = 1;
    ndp[1] = p - 1;
    for (long long j = i + 1, z = 1; j < n; ++j, ++z) {
      p = (p * a[j]) % 1000000007l;
      ans[z] += p * d;
      ans[z] %= 1000000007l;
      ndp[z + 1] = (ndp[z] * a[j]) % 1000000007l;
    }
    for (long long j = 0; j + 1 < dp.size(); ++j) {
      ans[j] += dp[j] * d;
      ans[j] %= 1000000007l;
    }
    for (long long j = (long long)(dp.size()) - 2; j >= 0; --j) {
      dp[j + 1] = dp[j];
    }
    dp[0] = 0;
    for (long long i = 0; i < ndp.size(); ++i) {
      dp[i] += ndp[i];
      dp[i] %= 1000000007l;
    }
  }
  for (signed i = 0; i < (ans.size() - 1); i++) {
    if (ans[i] & 1) ans[i] += 1000000007l;
    cout << ans[i] / 2 << ' ';
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  Solve();
  return 0;
}
