#include <algorithm>
#include <array>
#include <atomic>
#include <bitset>
#include <chrono>
#include <complex>
#include <condition_variable>
#include <deque>
#include <exception>
#include <forward_list>
#include <fstream>
#include <functional>
#include <future>
#include <initializer_list>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <mutex>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <system_error>
#include <thread>
#include <tuple>
#include <type_traits>
#include <typeindex>
#include <typeinfo>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <valarray>
#include <vector>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
//typedef long double ld;

typedef map<int, int> mii;
typedef pair<int, int> pii;
typedef pair<double,double> pdd;
typedef set<int> si;
typedef set<ll> sll;
typedef vector<int> vi;
typedef vector<pair<int, int > > vii;
typedef vector<ll> vll;
typedef vector<double> vd;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
typedef vector<vll> vvll;

constexpr ll MOD = 1e9+7;
//constexpr int INF = 1<<30;
//constexpr ll  LINF = 1LL<<60;

#define Sort(x) sort(x.begin(),x.end())
#define Reverse(x) reverse(x.begin(),x.end())
#define ABS(a,b) ((a)<(b)?(b)-(a):(a)-(b))
#define nbit(n) (1ll<<(n))

// sort(begin(x), end(x), greater<ll>());
// lower_bound(a.begin(), a.end(), val): a[i] ≥ valである最左の位置
// upper_bound(a.begin(), a.end(), val): a[i] > valである最左の位置

// Returns minimum of a and b.
// If a is less b, a is set to b.
template<typename T>
T chmin(T& a, T b) {
  if (a > b) {
    a = b;
  }
  return a;
}

// Returns maximum of a and b.
// If a is less b, a is set to b.
template<typename T>
T chmax(T& a, T b) {
  if (a < b) {
    a = b;
  }
  return a;
}

// a = (a+b)%MOD;
void addmod(ll& a, ll b) {
  a = (a+b)%MOD;
}

template <typename T>
void dumpContents(const T& v, const string& msg)
{
  cerr << "### " << msg << " ###\n";
  for (const auto& x : v) {
    cerr << x << " ";
  }
  cerr << endl;
}

struct before_main_function {
  before_main_function() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout<<setprecision(20)<<fixed;
    #define endl "\n"
  }
} before_main_function;

// Calculate aCb mod 1000000007 in O(SIZE)
template<int SIZE>
struct Combination {
  static constexpr long long mod = 1000000007;

  long long inv[SIZE+1];           // modでの逆元
  long long factorial[SIZE+1];     // modでの階乗
  long long invfactorial[SIZE+1];  // modでの階乗の逆元

  Combination() {
    inv[1] = 1;
    // po()を使えばO(N log p)だが、O(N)で計算するアルゴリズム
    for (int i=2; i<=SIZE; i++) {
      inv[i] = mod - (mod/i)*inv[mod%i] % mod;
    }

    factorial[0] = invfactorial[0] = 1;
    for (int i=1; i<=SIZE; i++){
      factorial[i] = factorial[i-1] * i % mod;
      invfactorial[i] = invfactorial[i-1] * inv[i] % mod;
    }
  }

  long long operator()(long long a, long long b) const {
    if (b<0 || a<b) return 0;

    return (invfactorial[b] * invfactorial[a-b]) % mod * factorial[a] % mod;
  }
};

// ========== end of template ==========
constexpr int N_MAX = 2000;
Combination<N_MAX+100> combi;

int N, K;

ll split(int n, int k) {
  if (n<=0 || k <=0) return 0;
  if (k==1) return 1;
  if (k>n) return 0;

  return combi(n-1, k-1);
}

ll solve(int i) {
  if (i==1) {
    if (N==K) return 1;
  }

  ll ret = 0;

  // 1) b..x..x..b
  if (i>=2)
    addmod(ret, split(K,i)*split(N-K, i-1)%MOD);

  //cerr << "1) " << ret << endl;

  // xb...b
  addmod(ret, split(K,i)*split(N-K, i)*2%MOD);
  //cerr << "2) " << ret << endl;

  // xb...bx
  addmod(ret, split(K,i)*split(N-K, i+1)%MOD);
  //cerr << "3) " << ret << endl;

  return ret;
}

int main(int argc, char** argv) {
  cin >> N >> K;

  for (int i=1; i<=K; i++) {
    cout << solve(i) << endl;
  }

  return 0;
}


Measured memory_bytes: 384