#include <bits/stdc++.h>
using namespace std;
const int N = 5005, mo = 1e9 + 7;
int n, a[N], s[N], Is[N], f[N][N << 1], Ans[N << 1];
int quick(int x, int y) {
  if (!y) return 1;
  int s = quick(x, y >> 1);
  s = (long long)s * s % mo;
  if (y & 1) s = (long long)s * x % mo;
  return s;
}
int main() {
  scanf("%d", &n);
  s[0] = Is[0] = 1;
  for (int i = 1; i < n; i++) {
    scanf("%d", &a[i]);
    s[i] = (long long)s[i - 1] * a[i] % mo;
    Is[i] = quick(s[i], mo - 2);
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      f[min(i, j) - 1][i + j] =
          (f[min(i, j) - 1][i + j] + (long long)s[i - 1] * s[j - 1]) % mo;
      if (i <= j) Ans[j - i] = (Ans[j - i] + s[j - 1]) % mo;
    }
  for (int i = n - 1; i; i--) {
    for (int j = i + i; j <= n + n; j++) {
      f[i][j] = (f[i + 1][j] + f[i][j]) % mo;
      Ans[j - i - i] =
          (Ans[j - i - i] + (long long)f[i][j] * Is[i] % mo * Is[i] % mo *
                                ((long long)a[i] * (a[i] - 1) / 2 % mo) % mo *
                                s[i - 1]) %
          mo;
    }
  }
  for (int i = 1; i <= 2 * n - 2; i++) printf("%d ", Ans[i]);
}
