// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;



// #undef LOCAL

#ifdef LOCAL

#include "../lib/dump.hpp"

#else

#define dump(...)

#define dumpv(...)

#endif



typedef long long ll;

typedef pair<int, int> P;

const ll MOD = 1e9 + 7;

const ll INF = 1e18;



// フェルマーの小定理を使った計算

class Felmat

{

  ll M;

  vector<ll> fac;  // n! (mod M)

  vector<ll> ifac; // k!^{M-2} (mod M)



public:

  Felmat(ll max_nk, ll m)

  {

    M = m;

    fac.reserve(max_nk + 1);

    ifac.reserve(max_nk + 1);

    fac[0] = 1;

    ifac[0] = 1;

    for (ll i = 0; i < max_nk; i++) {

      fac[i + 1] = fac[i] * (i + 1) % M;              // n! (mod M)

      ifac[i + 1] = ifac[i] * mpow(i + 1, M - 2) % M; // k!^{M-2} (mod M)

    }

  }

  ll mpow(ll x, ll n)

  { // x^n (mod M)

    ll ans = 1;

    while (n != 0) {

      if (n & 1)

        ans = ans * x % M;

      x = x * x % M;

      n = n >> 1;

    }

    return ans;

  }

  ll minv(ll a)

  { // 1/a (mod M)

    ll b = M, u = 1, v = 0;

    while (b) {

      ll tmp = a / b;

      a -= tmp * b;

      swap(a, b);

      u -= tmp * v;

      swap(u, v);

    }

    u %= M;

    if (u < 0)

      u += M;

    return u;

  }

  ll mfac(ll x)

  { // n! (mod M)

    int i;

    return fac[x];

  }

  ll comb(ll n, ll k)

  { // nCk (mod M)

    if (n == 0 && k == 0)

      return 1;

    if (n < k || n < 0)

      return 0;

    ll tmp = ifac[n - k] * ifac[k] % M;

    return tmp * fac[n] % M;

  }

  ll perm(ll n, ll k)

  { // nPk (mod M)

    if (n < k)

      return 0;

    ll tmp = ifac[n - k] % M;

    return tmp * fac[n] % M;

  }

};



int main()

{

  cin.tie(0);

  ios::sync_with_stdio(false);

  // freopen("temp.1", "r", stdin);

  

  Felmat fm(4005, MOD);



  int N, K;

  cin >> N >> K;

  for (int i = 1; i <= K; i++) {

    ll a = fm.comb(K - 1, i - 1);

    ll b = fm.comb(N - K + 1, i);

    // ll b = fm.comb(N - K + i, i);

    dump(a, b);

    cout << a * b % MOD << endl;

  }

  return 0;

}

// Faster C++ solution for the same problem (measured speedup: 1.5919666419813503x):
#include <bits/stdc++.h>

using namespace std;



// #undef LOCAL

#ifdef LOCAL

#include "../lib/dump.hpp"

#else

#define dump(...)

#define dumpv(...)

#endif



typedef long long ll;

typedef pair<int, int> P;

const ll MOD = 1e9 + 7;

const ll INF = 1e18;



// フェルマーの小定理を使った計算

class Felmat

{

  ll M;

  vector<ll> fac;  // n! (mod M)

  vector<ll> ifac; // k!^{M-2} (mod M)



public:

  Felmat(ll max_nk, ll m)

  {

    M = m;

    fac.reserve(max_nk + 1);

    ifac.reserve(max_nk + 1);

    fac[0] = 1;

    ifac[0] = 1;

    for (ll i = 0; i < max_nk; i++) {

      fac[i + 1] = fac[i] * (i + 1) % M;              // n! (mod M)

      ifac[i + 1] = ifac[i] * mpow(i + 1, M - 2) % M; // k!^{M-2} (mod M)

    }

  }

  ll mpow(ll x, ll n)

  { // x^n (mod M)

    ll ans = 1;

    while (n != 0) {

      if (n & 1)

        ans = ans * x % M;

      x = x * x % M;

      n = n >> 1;

    }

    return ans;

  }

  ll minv(ll a)

  { // 1/a (mod M)

    ll b = M, u = 1, v = 0;

    while (b) {

      ll tmp = a / b;

      a -= tmp * b;

      swap(a, b);

      u -= tmp * v;

      swap(u, v);

    }

    u %= M;

    if (u < 0)

      u += M;

    return u;

  }

  ll mfac(ll x)

  { // n! (mod M)

    int i;

    return fac[x];

  }

  ll comb(ll n, ll k)

  { // nCk (mod M)

    if (n == 0 && k == 0)

      return 1;

    if (n < k || n < 0)

      return 0;

    ll tmp = ifac[n - k] * ifac[k] % M;

    return tmp * fac[n] % M;

  }

  ll perm(ll n, ll k)

  { // nPk (mod M)

    if (n < k)

      return 0;

    ll tmp = ifac[n - k] % M;

    return tmp * fac[n] % M;

  }

};



int main()

{

  cin.tie(0);

  ios::sync_with_stdio(false);

  // freopen("temp.1", "r", stdin);

  

  Felmat fm(2005, MOD);



  int N, K;

  cin >> N >> K;

  for (int i = 1; i <= K; i++) {

    ll a = fm.comb(K - 1, i - 1);

    ll b = fm.comb(N - K + 1, i);

    // ll b = fm.comb(N - K + i, i);

    dump(a, b);

    cout << a * b % MOD << endl;

  }

  return 0;

}