#組み合わせ個数
def choose(n, r, mod)
  return 0 if not (0 <= r and r <= n)
  return 1 if r == 0 or r == n
  fact(n, mod) * inverse(fact(r, mod) * fact(n-r, mod) % mod, mod) % mod
end
#階乗(MODあり)
@fact = [1]
def fact(n, mod)
  if n > @fact.size then
    f = @fact[-1]
    (@fact.size+1..n).each{|i|
      f = (f * i) % mod
      @fact << f
    }
  end
  @fact[n-1]
end
#逆元(MODあり)
def inverse(x, mod)
  pow(x, mod-2, mod)
end
#べき乗(MODあり)(繰り返し２乗法)
def pow(x, n, mod)
  ans = 1
  while n > 0
    ans = ans * x % mod if n.odd?
    x = x * x % mod
    n >>= 1
  end
  ans
end
#分割組み合わせ個数
def devide_count(n, r, mod)
  @ary = []
  @hsh = Hash.new{|h, k| h[k] = 0}
  devide_to_array(n, r, 1, mod)

  ret = 0
  @hsh.each{|k, v|
    tmp = 1
    k.each{|i|
      next if i == 1
      tmp *= inverse(fact(i, mod) % mod, mod)
    }
    ret += (v * fact(r, mod) * tmp) % mod
  }
  ret % mod
end

def devide_to_array(n, r, b, mod)
  return if n < r
  return if n < b
  if r == 1 then
    @ary.push(n)
    lst = Hash.new{|h, k| h[k] = 0}
    @ary.each{|i| lst[i] += 1}
    @hsh[lst.values.sort] += 1
    @ary.pop
    return
  end
  fin = n / r
  (b..fin).each{|i|
    @ary.push(i)
    devide_to_array(n - i, r - 1, i, mod)
    @ary.pop
  }
end

N, K = gets.chomp.split(" ").map(&:to_i)
MOD = 10 ** 9 + 7

r = N - K
b = K
imax = [b, r + 1].min
(1..imax).each{|i|
  puts choose(r + 1, i, MOD) * devide_count(b, i, MOD)
}
(imax + 1..K).each{puts 0} if imax < K
