Buggy python submission (verdict: Runtime Error):
# coding: utf-8
import time
import re
import math
import fractions

def main():
    N,K=map(int,input().split())
    for i in range(1,K+1):
        if N-K+1-i>0:
            l=math.factorial(N-K+1)/(math.factorial(i)*math.factorial(N-K+1-i))
            r=math.factorial(K-i+i-1)/(math.factorial(K-i)*math.factorial(i-1))
            print(int(l*r%(1e9+7)))
        else:
            print(1)
start=time.time()
main()
#print("処理速度 {}sec".format(time.time()-start))
#A=list(map(int,input().split()))
#A,B,C=map(int,input().split())
#n=int(input())
# global N,A,B,C,D,memo,mx,mn,temp

Fixed submission:
# coding: utf-8
import re
import math
from copy import deepcopy
import fractions
import random
from heapq import heappop,heappush
import time
import sys
readline = sys.stdin.readline
#import numpy as np
mod=int(10**9+7)
inf=int(10**20)
class union_find():
    def __init__(self,n):
        self.n=n
        self.P=[a for a in range(N)]
        self.rank=[0]*n
 
    def find(self,x):
        if(x!=self.P[x]):self.P[x]=self.find(self.P[x])
        return self.P[x]
 
    def same(self,x,y):
        return self.find(x)==self.find(y)
 
    def link(self,x,y):
        if self.rank[x]<self.rank[y]:
            self.P[x]=y
        elif self.rank[y]<self.rank[x]:
            self.P[y]=x
        else:
            self.P[x]=y
            self.rank[y]+=1
 
    def unite(self,x,y):
        self.link(self.find(x),self.find(y))
 
    def size(self):
        S=set()
        for a in range(self.n):
            S.add(self.find(a))
        return len(S)

def bin_(num,size):
    A=[0]*size
    for a in range(size):
        if (num>>(size-a-1))&1==1:
            A[a]=1
        else:
            A[a]=0
    return A
def fac_list(n,mod_=0):
    A=[1]*(n+1)
    for a in range(2,len(A)):
        A[a]=A[a-1]*a
        if(mod>0):A[a]%=mod_
    return A
def comb(n,r):return math.factorial(n)//math.factorial(n-r)//math.factorial(r)
def next_comb(num,size):
    x=num&(-num)
    y=num+x
    z=num&(~y)
    z//=x
    z=z>>1
    num=(y|z)
    if(num>=(1<<size)):return False
    else:
        return num
 

 
#main

N,blue=map(int,input().split())
fac=fac_list(N,mod)
red=N-blue
for a in range(1,blue+1):
    if red+1<a:
        num=0
    else:
        num=fac[red+1]*pow(fac[red+1-a]*fac[a],mod-2,mod)
        num*=fac[blue-(a-1+1)+a-1]*pow(fac[blue-(a-1+1)]*fac[a-1],mod-2,mod)
    print(num%mod)

Buggy python submission (verdict: Runtime Error):
# coding: utf-8
import time
import re
import math
import fractions

def main():
    N,K=map(int,input().split())
    for i in range(1,K+1):
        if N-K+1-i>0:
            l=math.factorial(N-K+1)/(math.factorial(i)*math.factorial(N-K+1-i))
            r=math.factorial(K-i+i-1)/(math.factorial(K-i)*math.factorial(i-1))
            print(int(l*r%1e9))
        else:
            print(1)
start=time.time()
main()
#print("処理速度 {}sec".format(time.time()-start))
#A=list(map(int,input().split()))
#A,B,C=map(int,input().split())
#n=int(input())
# global N,A,B,C,D,memo,mx,mn,temp

Fixed submission:
# coding: utf-8
import re
import math
from copy import deepcopy
import fractions
import random
from heapq import heappop,heappush
import time
import sys
readline = sys.stdin.readline
#import numpy as np
mod=int(10**9+7)
inf=int(10**20)
class union_find():
    def __init__(self,n):
        self.n=n
        self.P=[a for a in range(N)]
        self.rank=[0]*n
 
    def find(self,x):
        if(x!=self.P[x]):self.P[x]=self.find(self.P[x])
        return self.P[x]
 
    def same(self,x,y):
        return self.find(x)==self.find(y)
 
    def link(self,x,y):
        if self.rank[x]<self.rank[y]:
            self.P[x]=y
        elif self.rank[y]<self.rank[x]:
            self.P[y]=x
        else:
            self.P[x]=y
            self.rank[y]+=1
 
    def unite(self,x,y):
        self.link(self.find(x),self.find(y))
 
    def size(self):
        S=set()
        for a in range(self.n):
            S.add(self.find(a))
        return len(S)

def bin_(num,size):
    A=[0]*size
    for a in range(size):
        if (num>>(size-a-1))&1==1:
            A[a]=1
        else:
            A[a]=0
    return A
def fac_list(n,mod_=0):
    A=[1]*(n+1)
    for a in range(2,len(A)):
        A[a]=A[a-1]*a
        if(mod>0):A[a]%=mod_
    return A
def comb(n,r):return math.factorial(n)//math.factorial(n-r)//math.factorial(r)
def next_comb(num,size):
    x=num&(-num)
    y=num+x
    z=num&(~y)
    z//=x
    z=z>>1
    num=(y|z)
    if(num>=(1<<size)):return False
    else:
        return num
 

 
#main

N,blue=map(int,input().split())
fac=fac_list(N,mod)
red=N-blue
for a in range(1,blue+1):
    if red+1<a:
        num=0
    else:
        num=fac[red+1]*pow(fac[red+1-a]*fac[a],mod-2,mod)
        num*=fac[blue-(a-1+1)+a-1]*pow(fac[blue-(a-1+1)]*fac[a-1],mod-2,mod)
    print(num%mod)