from collections import Counter

N = int(eval(input()))

A = list(map(int, input().split()))

mod = 10 **9 + 7





# 階乗 & 逆元計算

factorial = [1]

inverse = [1]

for i in range(1, N+2):

    factorial.append(factorial[-1] * i % mod)

    inverse.append(pow(factorial[-1], mod-2, mod))





# 組み合わせ計算

def nCr(n, r):

    if n < r or r < 0:

        return 0

    elif r == 0:

        return 1

    return factorial[n] * inverse[r] * inverse[n - r] % mod





X = Counter(A).most_common(1)[0][0]

X_index = []

for i, a in enumerate(A, start=1):

    if a == X:

        X_index.append(i)

L, R = X_index[0], X_index[1]



for k in range(1, N + 2):

    if k == 1:

        print(N)

    else:

        print(((nCr(N + 1, k) - nCr(N - R + L, k - 1)) % mod))

N = int(eval(input()))

A = list(map(int, input().split()))

MOD = 10 ** 9 + 7





duplicate_x = None

checked = set()

for a in A:

    if a in checked:

        duplicate_x = a

    checked.add(a)





x_l_index = A.index(duplicate_x)

x_r_index = N + 1 - A[::-1].index(duplicate_x) - 1





# 逆元の前計算

factorial = [1, 1]

inverse = [1, 1]

invere_base = [0, 1]

for i in range(2, N + 2):

    factorial.append((factorial[-1] * i) % MOD)

    invere_base.append((-invere_base[MOD % i] * (MOD // i)) % MOD)

    inverse.append((inverse[-1] * invere_base[-1]) % MOD)





def nCr(n, r):

    if not 0 <= r <= n:

        return 0

    return factorial[n] * inverse[r] * inverse[n - r] % MOD





for k in range(1, N + 1 + 1):

    print(((nCr(N + 1, k) - nCr(max(0, x_l_index) + max(N + 1 - x_r_index - 1, 0), k - 1)) % MOD))

from collections import Counter

N = int(eval(input()))
A = list(map(int, input().split()))
mod = 10**9 + 7
# 階乗 & 逆元計算
factorial = [1]
inverse = [1]
for i in range(1, N + 2):
    factorial.append(factorial[-1] * i % mod)
    inverse.append(pow(factorial[-1], mod - 2, mod))
# 組み合わせ計算
def nCr(n, r):
    if n < r or r < 0:
        return 0
    elif r == 0:
        return 1
    return factorial[n] * inverse[r] * inverse[n - r] % mod


X = Counter(A).most_common(1)[0][0]
X_index = []
for i, a in enumerate(A, start=1):
    if a == X:
        X_index.append(i)
L, R = X_index[0], X_index[1]
for k in range(1, N + 2):
    if k == 1:
        print(N)
    else:
        print(((nCr(N + 1, k) - nCr(N - R + L, k - 1)) % mod))

N = int(eval(input()))
A = list(map(int, input().split()))
MOD = 10**9 + 7
duplicate_x = None
checked = set()
for a in A:
    if a in checked:
        duplicate_x = a
    checked.add(a)
x_l_index = A.index(duplicate_x)
x_r_index = N + 1 - A[::-1].index(duplicate_x) - 1
# 逆元の前計算
factorial = [1, 1]
inverse = [1, 1]
invere_base = [0, 1]
for i in range(2, N + 2):
    factorial.append((factorial[-1] * i) % MOD)
    invere_base.append((-invere_base[MOD % i] * (MOD // i)) % MOD)
    inverse.append((inverse[-1] * invere_base[-1]) % MOD)


def nCr(n, r):
    if not 0 <= r <= n:
        return 0
    return factorial[n] * inverse[r] * inverse[n - r] % MOD


for k in range(1, N + 1 + 1):
    print(
        (
            (
                nCr(N + 1, k)
                - nCr(max(0, x_l_index) + max(N + 1 - x_r_index - 1, 0), k - 1)
            )
            % MOD
        )
    )

-from collections import Counter - -mod = 10**9 + 7 -# 階乗 & 逆元計算 -factorial = [1] -inverse = [1] -for i in range(1, N + 2): -    factorial.append(factorial[-1] * i % mod) -    inverse.append(pow(factorial[-1], mod - 2, mod)) -# 組み合わせ計算 -def nCr(n, r): -    if n < r or r < 0: -        return 0 -    elif r == 0: -        return 1 -    return factorial[n] * inverse[r] * inverse[n - r] % mod +MOD = 10**9 + 7 +duplicate_x = None +checked = set() +for a in A: +    if a in checked: +        duplicate_x = a +    checked.add(a) +x_l_index = A.index(duplicate_x) +x_r_index = N + 1 - A[::-1].index(duplicate_x) - 1 +# 逆元の前計算 +factorial = [1, 1] +inverse = [1, 1] +invere_base = [0, 1] +for i in range(2, N + 2): +    factorial.append((factorial[-1] * i) % MOD) +    invere_base.append((-invere_base[MOD % i] * (MOD // i)) % MOD) +    inverse.append((inverse[-1] * invere_base[-1]) % MOD) -X = Counter(A).most_common(1)[0][0] -X_index = [] -for i, a in enumerate(A, start=1): -    if a == X: -        X_index.append(i) -L, R = X_index[0], X_index[1] -for k in range(1, N + 2): -    if k == 1: -        print(N) -    else: -        print(((nCr(N + 1, k) - nCr(N - R + L, k - 1)) % mod)) +def nCr(n, r): +    if not 0 <= r <= n: +        return 0 +    return factorial[n] * inverse[r] * inverse[n - r] % MOD + + +for k in range(1, N + 1 + 1): +    print( +        ( +            ( +                nCr(N + 1, k) +                - nCr(max(0, x_l_index) + max(N + 1 - x_r_index - 1, 0), k - 1) +            ) +            % MOD +        ) +    )