# 2019-11-15 00:35:39(JST)

import sys

# import collections

# import math

# from string import ascii_lowercase, ascii_uppercase, digits

# from bisect import bisect_left as bi_l, bisect_right as bi_r

# import itertools

from functools import reduce

import operator as op

# from scipy.misc import comb # float

# import numpy as np 



def nCr(n, r):

    r = min(r, n - r)

    upper = reduce(op.mul, list(range(n, n-r, -1)), 1)

    lower = reduce(op.mul, list(range(r, 0, -1)), 1)

    return upper // lower



mod = 10 ** 9 + 7



def main():

    n, k = [int(x) for x in sys.stdin.readline().split()]



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

        if i <= n - k + 1:

            print((nCr(n-k+1, i) * nCr(k-1, i-1) % mod))

        else:

            print((0)) # i > n - k + 1 となる並べ方は存在しない



if __name__ == "__main__":

    main() 

import sys



MOD = 10 ** 9 + 7



def make_table(size=10**6, p=MOD):

    fac = [None] * (size + 1)

    fac[0] = 1

    for i in range(size):

        fac[i+1] = fac[i] * (i + 1) % p

    ifac = [None] * (size + 1)

    ifac[size] = pow(fac[size], p-2, p)

    for i in range(size, 0, -1):

        ifac[i-1] = ifac[i] * i % p

    return fac, ifac



fac, ifac = make_table(5*10**3)



def comb(n, r, mod=MOD):

    if r > n or r < 0:

        return 0

    return fac[n] * ifac[r] % mod * ifac[n-r] % mod



def H(n, r):

    return comb(n - 1 + r, r)



n, k = map(int, sys.stdin.readline().split())



def main():

    res = [None] * (k + 1)

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

        if i > n - k + 1:

            for j in range(i, k+1):

                res[j] = 0

                break

        res[i] = H(i + 1, n - k - (i - 1)) * H(i, k - i) % MOD

    

    return res[1:]

    

if __name__ == '__main__':

    ans = main()

    print(*ans, sep='\n')

# 2019-11-15 00:35:39(JST)
import sys

# import collections
# import math
# from string import ascii_lowercase, ascii_uppercase, digits
# from bisect import bisect_left as bi_l, bisect_right as bi_r
# import itertools
from functools import reduce
import operator as op

# from scipy.misc import comb # float
# import numpy as np
def nCr(n, r):
    r = min(r, n - r)
    upper = reduce(op.mul, list(range(n, n - r, -1)), 1)
    lower = reduce(op.mul, list(range(r, 0, -1)), 1)
    return upper // lower


mod = 10**9 + 7


def main():
    n, k = [int(x) for x in sys.stdin.readline().split()]
    for i in range(1, k + 1):
        if i <= n - k + 1:
            print((nCr(n - k + 1, i) * nCr(k - 1, i - 1) % mod))
        else:
            print((0))  # i > n - k + 1 となる並べ方は存在しない


if __name__ == "__main__":
    main()

import sys

MOD = 10**9 + 7


def make_table(size=10**6, p=MOD):
    fac = [None] * (size + 1)
    fac[0] = 1
    for i in range(size):
        fac[i + 1] = fac[i] * (i + 1) % p
    ifac = [None] * (size + 1)
    ifac[size] = pow(fac[size], p - 2, p)
    for i in range(size, 0, -1):
        ifac[i - 1] = ifac[i] * i % p
    return fac, ifac


fac, ifac = make_table(5 * 10**3)


def comb(n, r, mod=MOD):
    if r > n or r < 0:
        return 0
    return fac[n] * ifac[r] % mod * ifac[n - r] % mod


def H(n, r):
    return comb(n - 1 + r, r)


n, k = map(int, sys.stdin.readline().split())


def main():
    res = [None] * (k + 1)
    for i in range(1, k + 1):
        if i > n - k + 1:
            for j in range(i, k + 1):
                res[j] = 0
                break
        res[i] = H(i + 1, n - k - (i - 1)) * H(i, k - i) % MOD
    return res[1:]


if __name__ == "__main__":
    ans = main()
    print(*ans, sep="\n")

-# 2019-11-15 00:35:39(JST) -# import collections -# import math -# from string import ascii_lowercase, ascii_uppercase, digits -# from bisect import bisect_left as bi_l, bisect_right as bi_r -# import itertools -from functools import reduce -import operator as op - -# from scipy.misc import comb # float -# import numpy as np -def nCr(n, r): -    r = min(r, n - r) -    upper = reduce(op.mul, list(range(n, n - r, -1)), 1) -    lower = reduce(op.mul, list(range(r, 0, -1)), 1) -    return upper // lower +MOD = 10**9 + 7 -mod = 10**9 + 7 +def make_table(size=10**6, p=MOD): +    fac = [None] * (size + 1) +    fac[0] = 1 +    for i in range(size): +        fac[i + 1] = fac[i] * (i + 1) % p +    ifac = [None] * (size + 1) +    ifac[size] = pow(fac[size], p - 2, p) +    for i in range(size, 0, -1): +        ifac[i - 1] = ifac[i] * i % p +    return fac, ifac + + +fac, ifac = make_table(5 * 10**3) + + +def comb(n, r, mod=MOD): +    if r > n or r < 0: +        return 0 +    return fac[n] * ifac[r] % mod * ifac[n - r] % mod + + +def H(n, r): +    return comb(n - 1 + r, r) + + +n, k = map(int, sys.stdin.readline().split()) -    n, k = [int(x) for x in sys.stdin.readline().split()] +    res = [None] * (k + 1) -        if i <= n - k + 1: -            print((nCr(n - k + 1, i) * nCr(k - 1, i - 1) % mod)) -        else: -            print((0))  # i > n - k + 1 となる並べ方は存在しない +        if i > n - k + 1: +            for j in range(i, k + 1): +                res[j] = 0 +                break +        res[i] = H(i + 1, n - k - (i - 1)) * H(i, k - i) % MOD +    return res[1:] -    main() +    ans = main() +    print(*ans, sep="\n")