from operator import mul

from functools import reduce

MOD = 10 ** 9 + 7



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



def cmb(n, r):

    if n < r:

        return 0

    r = min(r, n-r)

    if r == 0:

        return 1

    nume = reduce(mul, list(range(n, n-r, -1)))

    deno = reduce(mul, list(range(1, r+1)))

    

    return nume // deno % MOD



# 赤いボールの間と両端（N-K+1）の中からi個を選ぶ

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

    print((cmb((N-K+1), i) * cmb((K-1), i-1) % MOD))
import sys

import numpy as np



sr = lambda: sys.stdin.readline().rstrip()

ir = lambda: int(sr())

lr = lambda: list(map(int, sr().split()))



def cmb(n, k):

    return fact[n] * fact_inv[k] % MOD * fact_inv[n-k] % MOD



def cumprod(arr, MOD):

    L = len(arr); Lsq = int(L**.5+1)

    arr = np.resize(arr, Lsq**2).reshape(Lsq, Lsq)

    for n in range(1, Lsq):

        arr[:, n] *= arr[:, n-1]; arr[:, n] %= MOD

    for n in range(1, Lsq):

        arr[n] *= arr[n-1, -1]; arr[n] %= MOD

    return arr.ravel()[:L]



def make_fact(U, MOD):

    x = np.arange(U, dtype=np.int64); x[0] = 1

    fact = cumprod(x, MOD)

    x = np.arange(U, 0, -1, dtype=np.int64); x[0] = pow(int(fact[-1]), MOD-2, MOD)

    fact_inv = cumprod(x, MOD)[::-1]

    return fact, fact_inv



N, K = lr()

MOD = 10 ** 9 + 7

U = 2010 # 階乗テーブルの上限

fact, fact_inv = make_fact(U, MOD)

red = N-K

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

    # (red+1)Ci

    answer = 0 if red+1 < i else cmb(red+1, i)

    #print(answer)

    remain = K - i

    # remainをiの中に自由にいれる、i-1の壁を用意

    # (remain+(i-1)) C remain

    answer *= cmb(remain+i-1, remain)

    print((answer%MOD))



# 15

from operator import mul
from functools import reduce

MOD = 10**9 + 7
N, K = list(map(int, input().split()))


def cmb(n, r):
    if n < r:
        return 0
    r = min(r, n - r)
    if r == 0:
        return 1
    nume = reduce(mul, list(range(n, n - r, -1)))
    deno = reduce(mul, list(range(1, r + 1)))
    return nume // deno % MOD


# 赤いボールの間と両端（N-K+1）の中からi個を選ぶ
for i in range(1, K + 1):
    print((cmb((N - K + 1), i) * cmb((K - 1), i - 1) % MOD))

import sys
import numpy as np

sr = lambda: sys.stdin.readline().rstrip()
ir = lambda: int(sr())
lr = lambda: list(map(int, sr().split()))


def cmb(n, k):
    return fact[n] * fact_inv[k] % MOD * fact_inv[n - k] % MOD


def cumprod(arr, MOD):
    L = len(arr)
    Lsq = int(L**0.5 + 1)
    arr = np.resize(arr, Lsq**2).reshape(Lsq, Lsq)
    for n in range(1, Lsq):
        arr[:, n] *= arr[:, n - 1]
        arr[:, n] %= MOD
    for n in range(1, Lsq):
        arr[n] *= arr[n - 1, -1]
        arr[n] %= MOD
    return arr.ravel()[:L]


def make_fact(U, MOD):
    x = np.arange(U, dtype=np.int64)
    x[0] = 1
    fact = cumprod(x, MOD)
    x = np.arange(U, 0, -1, dtype=np.int64)
    x[0] = pow(int(fact[-1]), MOD - 2, MOD)
    fact_inv = cumprod(x, MOD)[::-1]
    return fact, fact_inv


N, K = lr()
MOD = 10**9 + 7
U = 2010  # 階乗テーブルの上限
fact, fact_inv = make_fact(U, MOD)
red = N - K
for i in range(1, K + 1):
    # (red+1)Ci
    answer = 0 if red + 1 < i else cmb(red + 1, i)
    # print(answer)
    remain = K - i
    # remainをiの中に自由にいれる、i-1の壁を用意
    # (remain+(i-1)) C remain
    answer *= cmb(remain + i - 1, remain)
    print((answer % MOD))
# 15

-from operator import mul -from functools import reduce +import sys +import numpy as np -MOD = 10**9 + 7 -N, K = list(map(int, input().split())) +sr = lambda: sys.stdin.readline().rstrip() +ir = lambda: int(sr()) +lr = lambda: list(map(int, sr().split())) -def cmb(n, r): -    if n < r: -        return 0 -    r = min(r, n - r) -    if r == 0: -        return 1 -    nume = reduce(mul, list(range(n, n - r, -1))) -    deno = reduce(mul, list(range(1, r + 1))) -    return nume // deno % MOD +def cmb(n, k): +    return fact[n] * fact_inv[k] % MOD * fact_inv[n - k] % MOD -# 赤いボールの間と両端（N-K+1）の中からi個を選ぶ +def cumprod(arr, MOD): +    L = len(arr) +    Lsq = int(L**0.5 + 1) +    arr = np.resize(arr, Lsq**2).reshape(Lsq, Lsq) +    for n in range(1, Lsq): +        arr[:, n] *= arr[:, n - 1] +        arr[:, n] %= MOD +    for n in range(1, Lsq): +        arr[n] *= arr[n - 1, -1] +        arr[n] %= MOD +    return arr.ravel()[:L] + + +def make_fact(U, MOD): +    x = np.arange(U, dtype=np.int64) +    x[0] = 1 +    fact = cumprod(x, MOD) +    x = np.arange(U, 0, -1, dtype=np.int64) +    x[0] = pow(int(fact[-1]), MOD - 2, MOD) +    fact_inv = cumprod(x, MOD)[::-1] +    return fact, fact_inv + + +N, K = lr() +MOD = 10**9 + 7 +U = 2010  # 階乗テーブルの上限 +fact, fact_inv = make_fact(U, MOD) +red = N - K -    print((cmb((N - K + 1), i) * cmb((K - 1), i - 1) % MOD)) +    # (red+1)Ci +    answer = 0 if red + 1 < i else cmb(red + 1, i) +    # print(answer) +    remain = K - i +    # remainをiの中に自由にいれる、i-1の壁を用意 +    # (remain+(i-1)) C remain +    answer *= cmb(remain + i - 1, remain) +    print((answer % MOD)) +# 15