#include <bits/stdc++.h>
using namespace std;
int expo(int base, int exponent, int mod) {
  int ans = 1;
  while (exponent != 0) {
    if (exponent & 1) ans = (1LL * ans * base) % mod;
    base = (1LL * base * base) % mod;
    exponent >>= 1;
  }
  return ans % mod;
}
int n, a[5005], ans[10005], pre[5005], inv[5005];
int up[5005][10005];
int get_down(int l, int r) {
  if (l <= 0 or r < 0) return 0;
  if (r == 0) return 1;
  r = l + r - 1;
  if (r >= n) return 0;
  return 1LL * pre[r] * inv[l - 1] % 1000000007;
}
void solve() {
  cin >> n;
  for (int i = 1; i < n; i++) cin >> a[i];
  a[0] = pre[0] = inv[0] = 1;
  for (int i = 1; i < n + 1; i++)
    pre[i] = 1LL * a[i] * pre[i - 1] % 1000000007,
    inv[i] = expo(pre[i], 1000000007 - 2, 1000000007);
  for (int i = 1; i < n + 1; i++) {
    for (int j = 1; j < 2 * n - 1; j++) {
      if (i >= 2)
        up[i][j] = (0LL + up[i - 1][j - 1] + get_down(i - 1, j - 1) -
                    get_down(i, j - 2) + 1000000007) %
                   1000000007;
      ans[j] = (ans[j] + 1LL * pre[i - 1] * (up[i][j] + get_down(i, j))) %
               1000000007;
    }
  }
  for (int i = 1; i < 2 * n - 1; i++)
    cout << 1LL * ans[i] * (1000000007 + 1) / 2 % 1000000007 << " ";
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
