"""

問題文は言い換えると、青いボールの連続する区間の数がi個になるような並べ方はいくつあるか。というもの



上記のような並べ方はさらに4種類に分けられる。

(1). 両端が青色になるような並べ方

(2). 両端が赤色になるような並べ方

(3). 左端が赤色、右端が青色になるような並べ方

(4). 左端が青色、右端が赤色になるような並べ方



(1)の場合：A(K個並んでいるの青ボールの隙間にi-1個の赤ボールグループをぶっこむ箇所の場合の数) × B(i-1個のグループに割り振る赤ボールの数)

Aは(k-1)個の隙間から(i-1)個の隙間を選ぶ場合の数なので、(k-1)C(i-1)で計算できる。Bは各グループに最低1個は赤色のボールを割り当てるとして残りN-K-(i-1)をどう分けるか、の場合の数なので、(N-K-(i-1)+(i-2))C(i-2)で計算できる。



(2)の場合：A(K個並んでいるの青ボールの隙間にi-1個の赤ボールグループをぶっこむ箇所の場合の数) × B(i+1個のグループに割り振る赤ボールの数)

Aは(1)と同様なので省略。Bは各グループに最低1個は赤色のボールを割り当てるとして残りN-K-(i+1)をどう分けるか、の場合の数なので、(N-K-(i+1)+i)C(i)で計算できる。



(3)の場合：A(K個並んでいるの青ボールの隙間にi-1個の赤ボールグループをぶっこむ箇所の場合の数) × B(i個のグループに割り振る赤ボールの数)

Aは(1)と同様なので省略。Bは各グループに最低1個は赤色のボールを割り当てるとして残りN-K-iをどう分けるか、の場合の数なので、(N-K-i+(i-1))C(i-1)で計算できる。



(4)は(3)と同様なので省略



なお、赤のボールの数が分割するグループの数以上存在していないと行けないことに注意。

"""

def choose(n,k):

    import math

    return math.factorial(n)//(math.factorial(n-k)*math.factorial(k))

mod = 10**9 +7

N,K = list(map(int,input().split()))

for i in range(1,K+1):

    ans = 0

    A = choose(K-1,i-1)

    

    #(1)の場合の数を求める

    if N-K >= i-1:

        if i-2>=0:

            B = choose(N-K-(i-1)+(i-2),i-2)

            ans += A*B

            ans %= mod

        elif N==K:

            ans += 1

    

    if N-K >= i+1:

        B = choose(N-K-(i+1)+i,i)

        ans += A*B

        ans %= mod



    if N-K >= i:

        B = choose(N-K-i+(i-1),i-1)

        ans += A*B*2

        ans %= mod

    print(ans)



    

"""

Kをi分割する場合の数＝cmb(K+i-1,i-1)

両端が赤になる場合、両端が青になる場合、左端のみ赤になる場合、右端のみ赤になる場合についてそれぞれ計算すればよい。

"""

def cmb(n, r, p):

    if (r < 0) or (n < r):

        return 0

    r = min(r, n - r)

    return fact[n] * factinv[r] * factinv[n-r] % p



p = 10 ** 9 + 7

N = 10 ** 6  # N は必要分だけ用意する

fact = [1, 1]  # fact[n] = (n! mod p)

factinv = [1, 1]  # factinv[n] = ((n!)^(-1) mod p)

inv = [0, 1]  # factinv 計算用

 

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

    fact.append((fact[-1] * i) % p)

    inv.append((-inv[p % i] * (p // i)) % p)

    factinv.append((factinv[-1] * inv[-1]) % p)



N,K = list(map(int,input().split()))

for i in range(1,K+1):

    ans = 0

    #Kをi分割する場合の数

    divideK = cmb(K-i+i-1,i-1,p)

    #両端が赤の場合の置き方

    ans += divideK*cmb(N-K-(i+1)+i,i,p)%p

    ans %= p

    #両端が青の場合の置き方

    if i > 1:

        ans += divideK*cmb(N-K-(i-1)+i-2,i-2,p)%p

        ans %= p

    elif N-K == 0:

        ans += 1

    #左端のみが赤になる場合の置き方,右端のみが赤になる場合の置き方

    ans += divideK*cmb(N-K-i+i-1,i-1,p)*2%p

    ans %= p

    print(ans)
"""
問題文は言い換えると、青いボールの連続する区間の数がi個になるような並べ方はいくつあるか。というもの
上記のような並べ方はさらに4種類に分けられる。
(1). 両端が青色になるような並べ方
(2). 両端が赤色になるような並べ方
(3). 左端が赤色、右端が青色になるような並べ方
(4). 左端が青色、右端が赤色になるような並べ方
(1)の場合：A(K個並んでいるの青ボールの隙間にi-1個の赤ボールグループをぶっこむ箇所の場合の数) × B(i-1個のグループに割り振る赤ボールの数)
Aは(k-1)個の隙間から(i-1)個の隙間を選ぶ場合の数なので、(k-1)C(i-1)で計算できる。Bは各グループに最低1個は赤色のボールを割り当てるとして残りN-K-(i-1)をどう分けるか、の場合の数なので、(N-K-(i-1)+(i-2))C(i-2)で計算できる。
(2)の場合：A(K個並んでいるの青ボールの隙間にi-1個の赤ボールグループをぶっこむ箇所の場合の数) × B(i+1個のグループに割り振る赤ボールの数)
Aは(1)と同様なので省略。Bは各グループに最低1個は赤色のボールを割り当てるとして残りN-K-(i+1)をどう分けるか、の場合の数なので、(N-K-(i+1)+i)C(i)で計算できる。
(3)の場合：A(K個並んでいるの青ボールの隙間にi-1個の赤ボールグループをぶっこむ箇所の場合の数) × B(i個のグループに割り振る赤ボールの数)
Aは(1)と同様なので省略。Bは各グループに最低1個は赤色のボールを割り当てるとして残りN-K-iをどう分けるか、の場合の数なので、(N-K-i+(i-1))C(i-1)で計算できる。
(4)は(3)と同様なので省略
なお、赤のボールの数が分割するグループの数以上存在していないと行けないことに注意。
"""


def choose(n, k):
    import math

    return math.factorial(n) // (math.factorial(n - k) * math.factorial(k))


mod = 10**9 + 7
N, K = list(map(int, input().split()))
for i in range(1, K + 1):
    ans = 0
    A = choose(K - 1, i - 1)
    # (1)の場合の数を求める
    if N - K >= i - 1:
        if i - 2 >= 0:
            B = choose(N - K - (i - 1) + (i - 2), i - 2)
            ans += A * B
            ans %= mod
        elif N == K:
            ans += 1
    if N - K >= i + 1:
        B = choose(N - K - (i + 1) + i, i)
        ans += A * B
        ans %= mod
    if N - K >= i:
        B = choose(N - K - i + (i - 1), i - 1)
        ans += A * B * 2
        ans %= mod
    print(ans)

"""
Kをi分割する場合の数＝cmb(K+i-1,i-1)
両端が赤になる場合、両端が青になる場合、左端のみ赤になる場合、右端のみ赤になる場合についてそれぞれ計算すればよい。
"""


def cmb(n, r, p):
    if (r < 0) or (n < r):
        return 0
    r = min(r, n - r)
    return fact[n] * factinv[r] * factinv[n - r] % p


p = 10**9 + 7
N = 10**6  # N は必要分だけ用意する
fact = [1, 1]  # fact[n] = (n! mod p)
factinv = [1, 1]  # factinv[n] = ((n!)^(-1) mod p)
inv = [0, 1]  # factinv 計算用
for i in range(2, N + 1):
    fact.append((fact[-1] * i) % p)
    inv.append((-inv[p % i] * (p // i)) % p)
    factinv.append((factinv[-1] * inv[-1]) % p)
N, K = list(map(int, input().split()))
for i in range(1, K + 1):
    ans = 0
    # Kをi分割する場合の数
    divideK = cmb(K - i + i - 1, i - 1, p)
    # 両端が赤の場合の置き方
    ans += divideK * cmb(N - K - (i + 1) + i, i, p) % p
    ans %= p
    # 両端が青の場合の置き方
    if i > 1:
        ans += divideK * cmb(N - K - (i - 1) + i - 2, i - 2, p) % p
        ans %= p
    elif N - K == 0:
        ans += 1
    # 左端のみが赤になる場合の置き方,右端のみが赤になる場合の置き方
    ans += divideK * cmb(N - K - i + i - 1, i - 1, p) * 2 % p
    ans %= p
    print(ans)

-問題文は言い換えると、青いボールの連続する区間の数がi個になるような並べ方はいくつあるか。というもの -上記のような並べ方はさらに4種類に分けられる。 -(1). 両端が青色になるような並べ方 -(2). 両端が赤色になるような並べ方 -(3). 左端が赤色、右端が青色になるような並べ方 -(4). 左端が青色、右端が赤色になるような並べ方 -(1)の場合：A(K個並んでいるの青ボールの隙間にi-1個の赤ボールグループをぶっこむ箇所の場合の数) × B(i-1個のグループに割り振る赤ボールの数) -Aは(k-1)個の隙間から(i-1)個の隙間を選ぶ場合の数なので、(k-1)C(i-1)で計算できる。Bは各グループに最低1個は赤色のボールを割り当てるとして残りN-K-(i-1)をどう分けるか、の場合の数なので、(N-K-(i-1)+(i-2))C(i-2)で計算できる。 -(2)の場合：A(K個並んでいるの青ボールの隙間にi-1個の赤ボールグループをぶっこむ箇所の場合の数) × B(i+1個のグループに割り振る赤ボールの数) -Aは(1)と同様なので省略。Bは各グループに最低1個は赤色のボールを割り当てるとして残りN-K-(i+1)をどう分けるか、の場合の数なので、(N-K-(i+1)+i)C(i)で計算できる。 -(3)の場合：A(K個並んでいるの青ボールの隙間にi-1個の赤ボールグループをぶっこむ箇所の場合の数) × B(i個のグループに割り振る赤ボールの数) -Aは(1)と同様なので省略。Bは各グループに最低1個は赤色のボールを割り当てるとして残りN-K-iをどう分けるか、の場合の数なので、(N-K-i+(i-1))C(i-1)で計算できる。 -(4)は(3)と同様なので省略 -なお、赤のボールの数が分割するグループの数以上存在していないと行けないことに注意。 +Kをi分割する場合の数＝cmb(K+i-1,i-1) +両端が赤になる場合、両端が青になる場合、左端のみ赤になる場合、右端のみ赤になる場合についてそれぞれ計算すればよい。 -def choose(n, k): -    import math - -    return math.factorial(n) // (math.factorial(n - k) * math.factorial(k)) +def cmb(n, r, p): +    if (r < 0) or (n < r): +        return 0 +    r = min(r, n - r) +    return fact[n] * factinv[r] * factinv[n - r] % p -mod = 10**9 + 7 +p = 10**9 + 7 +N = 10**6  # N は必要分だけ用意する +fact = [1, 1]  # fact[n] = (n! mod p) +factinv = [1, 1]  # factinv[n] = ((n!)^(-1) mod p) +inv = [0, 1]  # factinv 計算用 +for i in range(2, N + 1): +    fact.append((fact[-1] * i) % p) +    inv.append((-inv[p % i] * (p // i)) % p) +    factinv.append((factinv[-1] * inv[-1]) % p) -    A = choose(K - 1, i - 1) -    # (1)の場合の数を求める -    if N - K >= i - 1: -        if i - 2 >= 0: -            B = choose(N - K - (i - 1) + (i - 2), i - 2) -            ans += A * B -            ans %= mod -        elif N == K: -            ans += 1 -    if N - K >= i + 1: -        B = choose(N - K - (i + 1) + i, i) -        ans += A * B -        ans %= mod -    if N - K >= i: -        B = choose(N - K - i + (i - 1), i - 1) -        ans += A * B * 2 -        ans %= mod +    # Kをi分割する場合の数 +    divideK = cmb(K - i + i - 1, i - 1, p) +    # 両端が赤の場合の置き方 +    ans += divideK * cmb(N - K - (i + 1) + i, i, p) % p +    ans %= p +    # 両端が青の場合の置き方 +    if i > 1: +        ans += divideK * cmb(N - K - (i - 1) + i - 2, i - 2, p) % p +        ans %= p +    elif N - K == 0: +        ans += 1 +    # 左端のみが赤になる場合の置き方,右端のみが赤になる場合の置き方 +    ans += divideK * cmb(N - K - i + i - 1, i - 1, p) * 2 % p +    ans %= p