# D - Blue and Red Balls



# 青いボールを並べる→赤いボールを青いボールの間に挿入する→残りの赤いボールを両端に置く



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

MOD = 10**9 + 7



# nCkを漸化式で求め、メモしておく

combinations_table = [[0]*(N+1) for _ in range(N+1)]

for idx in range(N+1):

    combinations_table[0][idx] = 1

    combinations_table[idx][0] = 1

    combinations_table[idx][1] = idx

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

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

        combinations_table[n][k] = combinations_table[n-1][k-1] + combinations_table[n-1][k]



# 連続した同色のボールの数nと、それらを何分割するか示すaを与えると、分割のパターン数を返す関数

def separate_balls(n,a):

    return combinations_table[n-1][a-1]



ans_list = []

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

    if N-K < n_separate-1: # 赤いボール不足でi分割不可

        ans_list.append(0)

    elif n_separate == 1:

        ans_list.append(N-K+1)

    else:

        tmp_blue = separate_balls(K, n_separate) % MOD  # K個の青いボールをi分割するパターン数

        tmp_red = 0

        for n_red_ball in range(n_separate-1, N-K+1): # 青いボールの分割に使う赤いボールの個数

            tmp_red_inner = separate_balls(n_red_ball, n_separate-1)  # j個の赤いボールをi-1分割して青いボールの隙間に入れるパターン数

            tmp_red_side = N-K-n_red_ball+1 # N-K-j個の赤いボールを両端に置くパターン数

            tmp_red += (tmp_red_inner * tmp_red_side) % MOD

        ans_list.append((tmp_blue * tmp_red) % MOD)  # 青いボールの置き方*赤いボールの置き方



for x in ans_list:

    print(x)
# D - Blue and Red Balls



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

MOD = 10**9 + 7



# nCkを漸化式で求め、メモしておく

combinations_table = [[0]*(N+1) for _ in range(N+1)]

for idx in range(N+1):

    combinations_table[0][idx] = 1

    combinations_table[idx][0] = 1

    combinations_table[idx][1] = idx

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

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

        combinations_table[n][k] = combinations_table[n-1][k-1] + combinations_table[n-1][k]



# 連続した同色のボールの数nと、それらを何分割するか示すaを与えると、分割のパターン数を返す関数

def separate_balls(n,a):

    return combinations_table[n-1][a-1]



# 青いボールを先に並べると赤いボールが両端にあるかどうかで場合分けが必要

# 赤いボールの隙間か両端から一部を選んで青いボールを挿入すれば場合分けが少なくて済む

ans_list = []

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

    if n_separate > K:

        ans_list.append(0)

    else:

        tmp_insert = combinations_table[N-K+1][n_separate]

        tmp_blue_group = separate_balls(K, n_separate)

        ans_list.append((tmp_insert * tmp_blue_group) % MOD)



for x in ans_list:

    print(x)
# D - Blue and Red Balls
# 青いボールを並べる→赤いボールを青いボールの間に挿入する→残りの赤いボールを両端に置く
N, K = list(map(int, input().split()))
MOD = 10**9 + 7
# nCkを漸化式で求め、メモしておく
combinations_table = [[0] * (N + 1) for _ in range(N + 1)]
for idx in range(N + 1):
    combinations_table[0][idx] = 1
    combinations_table[idx][0] = 1
    combinations_table[idx][1] = idx
for n in range(2, N + 1):
    for k in range(2, n + 1):
        combinations_table[n][k] = (
            combinations_table[n - 1][k - 1] + combinations_table[n - 1][k]
        )
# 連続した同色のボールの数nと、それらを何分割するか示すaを与えると、分割のパターン数を返す関数
def separate_balls(n, a):
    return combinations_table[n - 1][a - 1]


ans_list = []
for n_separate in range(1, K + 1):
    if N - K < n_separate - 1:  # 赤いボール不足でi分割不可
        ans_list.append(0)
    elif n_separate == 1:
        ans_list.append(N - K + 1)
    else:
        tmp_blue = separate_balls(K, n_separate) % MOD  # K個の青いボールをi分割するパターン数
        tmp_red = 0
        for n_red_ball in range(n_separate - 1, N - K + 1):  # 青いボールの分割に使う赤いボールの個数
            tmp_red_inner = separate_balls(
                n_red_ball, n_separate - 1
            )  # j個の赤いボールをi-1分割して青いボールの隙間に入れるパターン数
            tmp_red_side = N - K - n_red_ball + 1  # N-K-j個の赤いボールを両端に置くパターン数
            tmp_red += (tmp_red_inner * tmp_red_side) % MOD
        ans_list.append((tmp_blue * tmp_red) % MOD)  # 青いボールの置き方*赤いボールの置き方
for x in ans_list:
    print(x)

# D - Blue and Red Balls
N, K = list(map(int, input().split()))
MOD = 10**9 + 7
# nCkを漸化式で求め、メモしておく
combinations_table = [[0] * (N + 1) for _ in range(N + 1)]
for idx in range(N + 1):
    combinations_table[0][idx] = 1
    combinations_table[idx][0] = 1
    combinations_table[idx][1] = idx
for n in range(2, N + 1):
    for k in range(2, n + 1):
        combinations_table[n][k] = (
            combinations_table[n - 1][k - 1] + combinations_table[n - 1][k]
        )
# 連続した同色のボールの数nと、それらを何分割するか示すaを与えると、分割のパターン数を返す関数
def separate_balls(n, a):
    return combinations_table[n - 1][a - 1]


# 青いボールを先に並べると赤いボールが両端にあるかどうかで場合分けが必要
# 赤いボールの隙間か両端から一部を選んで青いボールを挿入すれば場合分けが少なくて済む
ans_list = []
for n_separate in range(1, K + 1):
    if n_separate > K:
        ans_list.append(0)
    else:
        tmp_insert = combinations_table[N - K + 1][n_separate]
        tmp_blue_group = separate_balls(K, n_separate)
        ans_list.append((tmp_insert * tmp_blue_group) % MOD)
for x in ans_list:
    print(x)

-# 青いボールを並べる→赤いボールを青いボールの間に挿入する→残りの赤いボールを両端に置く +# 青いボールを先に並べると赤いボールが両端にあるかどうかで場合分けが必要 +# 赤いボールの隙間か両端から一部を選んで青いボールを挿入すれば場合分けが少なくて済む -    if N - K < n_separate - 1:  # 赤いボール不足でi分割不可 +    if n_separate > K: -    elif n_separate == 1: -        ans_list.append(N - K + 1) -        tmp_blue = separate_balls(K, n_separate) % MOD  # K個の青いボールをi分割するパターン数 -        tmp_red = 0 -        for n_red_ball in range(n_separate - 1, N - K + 1):  # 青いボールの分割に使う赤いボールの個数 -            tmp_red_inner = separate_balls( -                n_red_ball, n_separate - 1 -            )  # j個の赤いボールをi-1分割して青いボールの隙間に入れるパターン数 -            tmp_red_side = N - K - n_red_ball + 1  # N-K-j個の赤いボールを両端に置くパターン数 -            tmp_red += (tmp_red_inner * tmp_red_side) % MOD -        ans_list.append((tmp_blue * tmp_red) % MOD)  # 青いボールの置き方*赤いボールの置き方 +        tmp_insert = combinations_table[N - K + 1][n_separate] +        tmp_blue_group = separate_balls(K, n_separate) +        ans_list.append((tmp_insert * tmp_blue_group) % MOD)