#include <bits/stdc++.h>
using namespace std;
constexpr int inf32 = 0x3f3f3f3f;
constexpr long long inf64 = 0x3f3f3f3f3f3f3f3f;
constexpr int mod = 1000000007;
constexpr int i2 = 500000004;
struct mint {
  int first;
  mint(int first = 0) : first(first) {}
  friend mint operator+(const mint a, const mint &b) {
    int first = a.first + b.first;
    return mint(first >= mod ? first - mod : first);
  }
  friend mint operator-(const mint a, const mint &b) {
    int first = a.first - b.first;
    return mint(first < 0 ? first + mod : first);
  }
  friend mint operator*(const mint a, const mint &b) {
    return mint(1ll * a.first * b.first % mod);
  }
  friend mint &operator+=(mint &a, const mint &b) { return a = a + b; }
  friend mint &operator-=(mint &a, const mint &b) { return a = a - b; }
  friend mint &operator*=(mint &a, const mint &b) { return a = a * b; }
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  int n;
  cin >> n, --n;
  vector<mint> a(n + 1);
  for (int i = 0; i < (n); ++i) cin >> a[i].first;
  vector<mint> p(n + 1, 1);
  for (int i = 0; i < (n); ++i) p[i + 1] = p[i] * a[i];
  vector<mint> dw(a), up(n + 1);
  mint res = 0;
  for (int j = 0; j < (n); ++j) res += dw[j] * p[j];
  cout << res.first << ' ';
  for (int i = 0; i < (n * 2 - 1); ++i) {
    res = 0;
    for (int j = (n)-1; j >= 0; --j) {
      up[j + 1] = up[j] * a[j];
      up[j + 1] = dw[j] * p[j] * (a[j] - 1) * i2 + up[j + 1];
      res += up[j + 1];
    }
    for (int j = 0; j < (n); ++j) {
      dw[j] = dw[j + 1] * a[j];
      res += dw[j] * p[j];
    }
    up[0] = dw[n] = 0;
    cout << res.first << ' ';
  }
  cout << '\n';
  return 0;
}
