#include "bits/stdc++.h"
#ifndef err
#define err(...)(void)0
#endif
using namespace std;
using ll = long long;
using ull = decltype(1ull);
template<class T>int size(T&&a) { return a.size(); }
#define REP(t,a)for(typename make_signed<decltype(a.second)>::type t=a.first,_l##t=a.second;t<_l##t;t++)
#define RREP(t,a)for(typename make_signed<decltype(a.second)>::type t=a.second-1,_l##t=a.first;t>=_l##t;t--)
template<class B>pair<int, B>make_pair(B b) { return{ 0,b }; }
#define rep(t,...)REP(t,make_pair(__VA_ARGS__))
#define rrep(t,...)RREP(t,make_pair(__VA_ARGS__))
#define all(a)begin(a),end(a)
#define rall(a)a.rbegin(),a.rend()
#define var(t, ...) t __VA_ARGS__;in,__VA_ARGS__;

void Calc();
int main()
{
  ios::sync_with_stdio(false); cin.tie(nullptr);
  cin.exceptions(istream::failbit | istream::badbit);
  cout << fixed << setprecision(15); Calc(); cout.flush(); return 0;
}
template<class A>void amax(A&a, A b) { a = max(a, b); }
template<class A>void amin(A&a, A b) { a = min(a, b); }
template<class A>int comp(A a, A b) { return a < b ? 1 : b < a ? -1 : 0; }
struct Scanner
{
  template<class A = string>A Next() { A a; cin >> a; return a; }
  template<class A = int>vector<A>Array(int n) { vector<A>a(n); for ( A&i : a ) cin >> i; return a; }
  string Line() const { string s; getline(cin, s); return s; }
  template<class A>Scanner&operator,(A&a) { a = Next<A>(); return *this; }
  template<class A>operator A() { return Next<A>(); }
}in;

/*---------------------------------------------------------------------*/

const ll mod = (ll)1e9 + 7;
template<ll MOD>struct Mint
{
  typedef const Mint&T;
  ll x = 0;
  Mint() {}
  Mint(ll a) { x = a % MOD; if ( x < 0 ) x += MOD; }
  Mint&operator+=(T a) { if ( (x += a.x) >= MOD ) x -= MOD; return *this; }
  Mint&operator-=(T a) { if ( (x += MOD - a.x) >= MOD ) x -= MOD; return *this; }
  Mint&operator*=(T a) { x = x * a.x % MOD; return *this; }
  Mint&operator/=(T a) { return *this *= a.Pow(MOD - 2); }
  Mint operator+(T a)const { return Mint(*this) += a; }
  Mint operator-(T a)const { return Mint(*this) -= a; }
  Mint operator*(T a)const { return Mint(*this) *= a; }
  Mint operator/(T a)const { return Mint(*this) /= a; }
  bool operator<(T a)const { return x < a.x; }
  bool operator==(T a)const { return x == a.x; }
  Mint Pow(ll k)const
  {
    if ( k == 0 ) return 1;
    Mint t = Pow(k / 2);
    return t *= (k & 1) ? t * *this : t;
  }
};
template<ll MOD>istream&operator >> (istream&i, Mint<MOD>&a) { return i >> a.x; }
template<ll MOD>ostream&operator<<(ostream&o, const Mint<MOD>&a) { return o << a.x; }
typedef Mint<mod>mint;

template<ll MOD = mod>Mint<MOD> CombMod(int n, int r)
{
  if ( n < r )return 0;
  Mint<MOD> a = 1, b = 1;
  rep(i, r) { a *= (n - i); }
  rep(i, 2, r + 1) { b *= i; }
  return a / b;
}

mint FACT[(int)1e5 + 10], IFACT[(int)1e5 + 10];
mint C(int n, int r)
{
  if ( n < 0 || r < 0 || r > n )return 0;
  if ( r > n / 2 )r = n - r;
  return FACT[n] * IFACT[n - r] * IFACT[r];
}

void Calc()
{

  int n = in;
  n++;
  FACT[0] = 1;
  IFACT[0] = 1;
  for ( int i = 1; i <= n; i++ )
  {
    FACT[i] = FACT[i - 1] * i;
    IFACT[i] = FACT[i].Pow(mod - 2);
  }

  auto a = in.Array(n);
  auto b = a;
  sort(all(b));
  int x = 0;
  rep(i, n - 1)if ( b[i] == b[i + 1] )
  {
    x = b[i];
    break;
  }

  int index = 0;
  int index2 = 0;
  rrep(i, n)if ( a[i] == x ) { index2 = i; break; }
  rep(i, n)if ( a[i] == x ) { index = i; break; }

  cout << (n - 1) << endl;
  err(index, x);
  rep(i, 1, n)
  {
    err(n - index + 1);
    cout << (C(n, i + 1)) - C((n - index2 - 1) + index, i) << endl;
  }

}


Measured memory_bytes: 3584