Buggy python submission (verdict: Time Limit Exceeded):
def D_11(x):
    n = x[0]  # 整数の数
    a = x[1:]  # 数列
    M = 10**9 + 7  # 求めた解の剰余をこれで取る

    # aの中から重複した要素のインデックス(それぞれl,rとする)を求める
    freq = [0] * (n + 1)
    for i in a:
        freq[i] += 1  # i番目の要素は整数iの個数
    index = [i for i, x in enumerate(a) if x == freq.index(
        max(freq))]  # 重複した数のインデックスを取得
    l, r = index[0] + 1, index[1] + 1  # +1するのは数列が1スタートのため

    # 組み合わせの計算
    def power(x, n, m):
        # 冪乗(powだと時間がかかりすぎるため)+剰余つき
        y = 1
        while n > 0:
            if n % 2 == 0:
                x = (x * x) % m
                n = n // 2
            else:
                y = (y * x) % m
                n -= 1
        return y

    # この部分は関数の外に出しておかないと、呼び出しのたびに計算して遅い
    factrial = [1] * (n + 2)
    inverse = [1] * (n + 2)
    for i in range(1, n + 2):
        factrial[i] = (factrial[i - 1] * i) % M
    inverse[n + 1] = power(factrial[n + 1], M - 2, M)  # フェルマーの小定理からの帰結
    for i in range(n, -1, -1):
        inverse[i] = (inverse[i + 1] * (i + 1)) % M

    def mod_combination(n, r, m):
        if r > n or n < 0 or r < 0:
            return 0
        else:
            return (factrial[n] * inverse[r] * inverse[n - r]) % m
    for k in range(1, n + 2):
        all_comb = mod_combination(n + 1, k, M) % M
        duplication = mod_combination(l + n - r, k - 1, M) % M
        print(all_comb - duplication)

n = int(input())
l = [int(i) for i in input().split()]
x = [n] + l
D_11(x)

Fixed submission:
def D_11(x):
    n = x[0]  # 整数の数
    a = x[1:]  # 数列
    M = 10**9 + 7  # 求めた解の剰余をこれで取る

    s = set()
    result = [x for x in a if x in s or s.add(x)]
    # for x in a:
    # if x in s:
    #     result.append(x)
    # s.add(x) と同じ書き方
    index = [i for i, x in enumerate(a) if x == result[0]]
    l = index[0] + 1
    r = index[1] + 1

    # フェルマーの小定理を用いてコンビネーションを効率よく計算
    factrial = [1] * (n + 2)
    for k in range(1, n + 2):
        factrial[k] = (factrial[k - 1] * k) % M
    fact_inv = [1] * (n + 2)
    fact_inv[n + 1] = pow(factrial[n + 1], M - 2, M)
    for k in range(n, -1, -1):
        fact_inv[k] = (fact_inv[k + 1] * (k + 1)) % M

    def nCr(n, r, M):
        if n < 0 or r < 0 or n < r:
            return 0
        else:
            return (factrial[n] * fact_inv[r] * fact_inv[n - r]) % M

    for k in range(1, n + 2):
        print((nCr(n + 1, k, M) - nCr((l - 1) + (n + 1 - r), k - 1, M)) % M)

n = int(input())
l = [int(i) for i in input().split()]
x = [n] + l
D_11(x)

Buggy python submission (verdict: Time Limit Exceeded):
def D_11(x):
    n = x[0]  # 整数の数
    a = x[1:]  # 数列
    M = pow(10, 9) + 7  # 求めた解の剰余をこれで取る

    # aの中から重複した要素のインデックス(それぞれl,rとする)を求める
    import collections
    freq = collections.Counter(a).most_common(1)  # 最も多く出てきた数(入力の制約より、頻度は2となる)
    index = [i for i, x in enumerate(a) if x == freq[0][0]]  # 重複した数のインデックスを取得
    l, r = index[0] + 1, index[1] + 1  # +1するのは数列が1スタートのため

    # 組み合わせの計算
    def power(x, n, m):
        # 冪乗(powだと時間がかかりすぎるため)+剰余つき
        y = 1
        while n > 0:
            if n % 2 == 0:
                x = (x * x) % m
                n = n // 2
            else:
                y = (y * x) % m
                n -= 1
        return y

    def mod_combination(n, r, m):
        if r > n:
            return 0
        factrial = [1] * (n + 1)
        inverse = [1] * (n + 1)
        for i in range(1, n + 1, 1):
            factrial[i] = (factrial[i - 1] * i) % m
            inverse[i] = power(factrial[i], m - 2, m)  # フェルマーの小定理からの帰結
        return (factrial[n] * inverse[r] * inverse[n - r]) % m

    for k in range(1, n + 2, 1):
        all_comb = mod_combination(n + 1, k, M)
        duplication = mod_combination(l + n - r, k - 1, M)
        print(all_comb - duplication)

n = int(input())
l = [int(i) for i in input().split()]
x = [n] + l
D_11(x)

Fixed submission:
def D_11(x):
    n = x[0]  # 整数の数
    a = x[1:]  # 数列
    M = 10**9 + 7  # 求めた解の剰余をこれで取る

    s = set()
    result = [x for x in a if x in s or s.add(x)]
    # for x in a:
    # if x in s:
    #     result.append(x)
    # s.add(x) と同じ書き方
    index = [i for i, x in enumerate(a) if x == result[0]]
    l = index[0] + 1
    r = index[1] + 1

    # フェルマーの小定理を用いてコンビネーションを効率よく計算
    factrial = [1] * (n + 2)
    for k in range(1, n + 2):
        factrial[k] = (factrial[k - 1] * k) % M
    fact_inv = [1] * (n + 2)
    fact_inv[n + 1] = pow(factrial[n + 1], M - 2, M)
    for k in range(n, -1, -1):
        fact_inv[k] = (fact_inv[k + 1] * (k + 1)) % M

    def nCr(n, r, M):
        if n < 0 or r < 0 or n < r:
            return 0
        else:
            return (factrial[n] * fact_inv[r] * fact_inv[n - r]) % M

    for k in range(1, n + 2):
        print((nCr(n + 1, k, M) - nCr((l - 1) + (n + 1 - r), k - 1, M)) % M)

n = int(input())
l = [int(i) for i in input().split()]
x = [n] + l
D_11(x)