N,K=gets.chomp.split(" ").map(&:to_i);
R=N-K
#逆元
MAXNUM=2003
MOD=1000000007
def inveuc(s,t) #s>tであるとする
 if(t==1)
  return[0,1]
 elsif(s>t&&s%t==1)
  return [1,-(s/t)]
 else
  eucq=s/t
  eucr=s%t
  listeuc=inveuc(t,eucr)
  return[listeuc[1],listeuc[0]-eucq*listeuc[1]]
 end
end
#逆元のリスト
$invnumarray=Array.new(MAXNUM+1,0)
def invnum(n)
   if ($invnumarray[n] == 0)
      val=inveuc(MOD,n)[1]
      $invnumarray[n] = val
      return val
   else
      return $invnumarray[n]
   end
end

#二項係数
$binommodarray = Array.new(MAXNUM+1).map{Array.new(MAXNUM+1, 0)}
#    既に計算した値は, 二次元配列 $binommodarray にキャッシュされて次回呼び出し時に使用される 
def binommod(n,k)
   if $binommodarray[n][k] == 0 then
      k = [k, n-k].min
      if k==0 then
         val = 1
      else
         val = (binommod(n-1,k-1)*n*invnum(k))%MOD
      end
      $binommodarray[n][k] = val
      return val
   else
      return $binommodarray[n][k]
   end
end



####青はi個にわかれるとする
def ans(i)
count=1
####iはMin(K,R+1)のときが最大
####青はi個にわかれる。K-i個の青とi-1個の仕切りを並べる
####赤はi+1個に分かれる。両端は0個でもよいので、R-(i-1)個の赤とi個の仕切りを並べる
count=(count*binommod(K-1,i-1))%MOD
count=(count*binommod(R+1,i))%MOD
return count
end




max=[K,R+1].min
n=1
while(n<=max)
print("#{ans(n)}\n")
n=n+1
end
