#include <bits/stdc++.h>
using namespace std;
#define int long long int
const int MOD = 1000000007;
int binpower(int a,int b,int MOD) {
int ans = 1;
while(b) {
if(b%2) {
ans = (ans*a)%MOD;
}
a = (a*a)%MOD;
b = b/2;
}
return ans;
}
const int N = 1e5 + 5;
int fact[N] = {1};
int nCr(int n,int r) {
int ans = (fact[n-r]*fact[r])%MOD;
ans = binpower(ans,MOD-2,MOD);
ans = (fact[n]*ans)%MOD;
return ans;
}
void solve() {
int n;
cin>>n;
vector<int> a(n+1);
int twice = 0;
int index = -1;
set<int> s;
for(int i=0;i<n+1;i++) {
cin>>a[i];
if(s.find(a[i])!=s.end()) {
twice = a[i];
}
s.insert(a[i]);
}
for(int i=0;i<n+1;i++) {
if(a[i]==twice) {
if(index==-1) {
index = i;
} else {
index = index + n - i;
}
}
}
int free = index;
for(int i=1;i<=n+1;i++) {
int total = nCr(n+1,i);
int not_fixed = i-1;
int remove = 0;
if(not_fixed<=free) {
remove = nCr(free,not_fixed);
}
total = (total - remove + MOD)%MOD;
cout<<total<<endl;
}
}
signed main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int t = 1;
// cin >> t;
for(int i=1;i<N;i++) {
fact[i] = (fact[i-1]*i)%MOD;
}
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZyBpbnQKY29uc3QgaW50IE1PRCA9IDEwMDAwMDAwMDc7CgppbnQgYmlucG93ZXIoaW50IGEsaW50IGIsaW50IE1PRCkgewogICAgaW50IGFucyA9IDE7CiAgICB3aGlsZShiKSB7CiAgICAgICAgaWYoYiUyKSB7CiAgICAgICAgICAgIGFucyA9IChhbnMqYSklTU9EOwogICAgICAgIH0KICAgICAgICBhID0gKGEqYSklTU9EOwogICAgICAgIGIgPSBiLzI7CiAgICB9CiAgICByZXR1cm4gYW5zOwp9Cgpjb25zdCBpbnQgTiA9IDFlNSArIDU7CmludCBmYWN0W05dID0gezF9OwppbnQgbkNyKGludCBuLGludCByKSB7CiAgICBpbnQgYW5zID0gKGZhY3Rbbi1yXSpmYWN0W3JdKSVNT0Q7CiAgICBhbnMgPSBiaW5wb3dlcihhbnMsTU9ELTIsTU9EKTsKICAgIGFucyA9IChmYWN0W25dKmFucyklTU9EOwogICAgcmV0dXJuIGFuczsKfQp2b2lkIHNvbHZlKCkgewogICAgaW50IG47CiAgICBjaW4+Pm47CiAgICB2ZWN0b3I8aW50PiBhKG4rMSk7CiAgICBpbnQgdHdpY2UgPSAwOwogICAgaW50IGluZGV4ID0gLTE7CiAgICBzZXQ8aW50PiBzOwogICAgZm9yKGludCBpPTA7aTxuKzE7aSsrKSB7CiAgICAgICAgY2luPj5hW2ldOwogICAgICAgIGlmKHMuZmluZChhW2ldKSE9cy5lbmQoKSkgewogICAgICAgICAgICB0d2ljZSA9IGFbaV07CiAgICAgICAgfQogICAgICAgIHMuaW5zZXJ0KGFbaV0pOwogICAgfQogICAgZm9yKGludCBpPTA7aTxuKzE7aSsrKSB7CiAgICAgICAgaWYoYVtpXT09dHdpY2UpIHsKICAgICAgICAgICAgaWYoaW5kZXg9PS0xKSB7CiAgICAgICAgICAgICAgICBpbmRleCA9IGk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ICsgbiAtIGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBpbnQgZnJlZSA9IGluZGV4OwogICAgZm9yKGludCBpPTE7aTw9bisxO2krKykgewogICAgICAgIGludCB0b3RhbCA9IG5DcihuKzEsaSk7CiAgICAgICAgaW50IG5vdF9maXhlZCA9IGktMTsKICAgICAgICBpbnQgcmVtb3ZlID0gMDsKICAgICAgICBpZihub3RfZml4ZWQ8PWZyZWUpIHsKICAgICAgICAgICAgcmVtb3ZlID0gIG5DcihmcmVlLG5vdF9maXhlZCk7CiAgICAgICAgfQogICAgICAgIHRvdGFsID0gKHRvdGFsIC0gcmVtb3ZlICsgTU9EKSVNT0Q7CiAgICAgICAgY291dDw8dG90YWw8PGVuZGw7CiAgICB9Cn0KCnNpZ25lZCBtYWluKCkgewojaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKICAgIGludCB0ID0gMTsKICAgIC8vIGNpbiA+PiB0OwogICAgZm9yKGludCBpPTE7aTxOO2krKykgewogICAgICAgIGZhY3RbaV0gPSAoZmFjdFtpLTFdKmkpJU1PRDsKICAgIH0KICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K