#include <bits/stdc++.h>
using namespace std;
const int N = 5005, P = 1e9 + 7;
int n, a[N], pre[N], s[N][N], q[N];
inline int read() {
  int f = 1, x = 0;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return f * x;
}
inline int bp(int a, int b) {
  int ans = 1;
  while (b) {
    if (b & 1) ans = 1ll * ans * a % P;
    a = 1ll * a * a % P;
    b = b >> 1;
  }
  return ans;
}
int main() {
  n = read(), pre[0] = 1;
  for (int i = (1), iend = (n - 1); i <= iend; i++) a[i] = read();
  for (int i = (1), iend = (n); i <= iend; i++)
    pre[i] = 1ll * pre[i - 1] * a[i] % P;
  for (int i = (1), iend = (n); i <= iend; i++)
    s[i][i] = 1ll * pre[i] * pre[i] % P;
  for (int j = (1), jend = (n - 1); j <= jend; j++)
    for (int i = (1), iend = (n - j); i <= iend; i++)
      s[i][i + j] =
          (s[i + 1][i + j - 1] + 1ll * 2 * pre[i] * pre[i + j] % P) % P;
  for (int i = (1), iend = (n); i <= iend; i++)
    q[i] = bp(1ll * 2 * pre[i] % P * pre[i] % P, P - 2);
  for (int i = (1), iend = (2 * n - 2); i <= iend; i++) {
    int ans = 0;
    for (int j = (1), jend = (n - 1); j <= jend; j++)
      if (i + j - 1 <= n) ans = (ans + pre[i + j - 1]) % P;
    for (int j = (1), jend = (n - 1); j <= jend; j++) {
      if (2 * j + i - n > n) break;
      int t = 1ll * a[j] * (a[j] - 1) % P * pre[j - 1] % P *
              s[max(j, 2 * j + i - n - 1)][min(j + i - 2, n - 1)] % P * q[j] %
              P;
      ans = (ans + t) % P;
    }
    printf("%d ", ans);
  }
  return 0;
}
