#include <bits/stdc++.h>
using namespace std;
const int oo = 0x3f3f3f3f;
const long long ooo = 9223372036854775807ll;
const int _cnt = 1000 * 1000 + 7;
const int _p = 1000 * 1000 * 1000 + 7;
const int N = 10005;
const double PI = acos(-1.0);
const double eps = 1e-9;
int o(int x) { return x % _p; }
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
int lcm(int a, int b) { return a / gcd(a, b) * b; }
void file_put() {
  string s = "/home/jslijin/jslijin/code/";
  freopen((s + "code.in").c_str(), "r", stdin);
  freopen((s + "code.out").c_str(), "w", stdout);
}
int dp[5005][10005], a[N], ans[N];
long long s[N], rev_2;
int n;
int main() {
  scanf("%d", &n), rev_2 = (_p + 1) >> 1, s[0] = 1;
  for (int i = (1); i <= (n - 1); ++i)
    scanf("%d", &a[i]), s[i] = s[i - 1] * a[i] % _p;
  for (int i = (1); i <= (n); ++i) dp[i][0] = s[i - 1];
  for (int i = (n - 1); i >= (2); --i)
    for (int l = (1); l <= (2 * (n - i)); ++l) {
      dp[i][l] = 2 * s[i + l - 1] % _p;
      if (l >= 2) (dp[i][l] += (long long)a[i] * dp[i + 1][l - 2] % _p) %= _p;
    }
  for (int l = (1); l <= (2 * n - 2); ++l)
    for (int i = (1); i <= (n - l / 2); ++i) {
      (ans[l] += s[i + l - 1]) %= _p;
      if (l >= 2)
        (ans[l] += (a[i] - 1) * rev_2 % _p * dp[i + 1][l - 2] % _p) %= _p;
    }
  for (int i = (1); i <= (2 * n - 2); ++i) printf("%d ", ans[i]);
  return 0;
}
