#include <bits/stdc++.h>

typedef long long ll;

using namespace std;

#define swap(a, b)    do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while(0)
#define repd(i, a, b) for(typeof(b) i = a; i < (b); ++i)
#define rep(i, n)     repd(i, 0, n)
#define dump(x)       cerr << #x << " = " << (x) << endl
#define debug(x)      cerr << "L" << __LINE__ << ": " << #x << " = " << (x) << endl
#define YesNo(x)      cout << ((x) ? "Yes" : "No") << endl
#define YESNO(x)      cout << ((x) ? "YES" : "NO") << endl
#define absi(x)       ( ((x) >= 0) ? (x) : (-(x)) )

class modint {
private:
	std::int64_t number;
	static const std::int64_t modulo;
public:
	static vector<modint> fac;
	static vector<modint> fac_inv;
	modint() : number(0) {}
	modint(const std::uint64_t new_number) { set(new_number); }
	modint(const modint& m) : number(m.number) {}

	void set(const std::int64_t new_number) { number = new_number % modulo; if(number < 0) number += modulo; }
	std::int64_t get() const { return number; }

	modint operator++(int) { modint ret = *this; ++(*this); return ret; } // Postfix Increment
	modint operator--(int) { modint ret = *this; --(*this); return ret; } // Postfix Decrement
	modint& operator++() { *this += 1; return *this; } // Prefix Increment
	modint& operator--() { *this -= 1; return *this; } // Prefix Decrement

	bool operator!() const noexcept { return !static_cast<bool>(*this); } // Logical Not
	modint operator+() const { return *this; }                                 // Unary Plus
	modint operator-() const { modint ret(*this);ret.set(-number);return ret;} // Unary Negation
	explicit operator std::int64_t() const noexcept{ return number; }      // Cast
	explicit operator bool()         const noexcept{ return number != 0; } // Cast

	modint& operator=(const std::int64_t i) { set(i); return *this; }

	modint operator*=(const modint& m) { set(number * m.number); return *this; }
	modint operator/=(const modint& m) { *this *= modint::inv(m); return *this; }
	modint operator%=(const modint& m) { set(number % m.number); return *this; }
	modint operator+=(const modint& m) { set(number + m.number); return *this; }
	modint operator-=(const modint& m) { set(number - m.number); return *this; }
	modint operator*=(const std::int64_t& i) { set(number * i); return *this; }
	modint operator/=(const std::int64_t& i) { *this /= modint(i); return *this; }
	modint operator%=(const std::int64_t& i) { set(number % i); return *this; }
	modint operator+=(const std::int64_t& i) { set(number + i); return *this; }
	modint operator-=(const std::int64_t& i) { set(number - i); return *this; }

	static modint pow(const modint& m1, const modint& m2) {
		std::int64_t base     = m1.get();
		std::int64_t exponent = m2.get();
		std::int64_t ret = 1;

		//if(exponent == 0)      return modint(1);
		//else if(exponent == 1) return modint(base);
		//else if(base == 0)     return modint(0);
		//else if(base == 1)     return modint(1);

		while(exponent > 0) {
			if(exponent & 1) ret = (ret * base) % modulo;
			base = (base * base) % modulo;
			exponent >>= 1;
		}

		return modint(ret);
	}

	/* Inverse Element */
	static modint inv(const modint& m) {
		std::int64_t a = m.get();
		std::int64_t b = modulo;
		std::int64_t u = 1;
		std::int64_t v = 0;

		std::int64_t aa = a;

		while(b != 0) {
			std::int64_t t = a / b;
			a -= t * b;
			swap(a, b);
			u -= t * v;
			swap(u, v);
		}

		modint ret(u);
		return ret;
	}

	static modint nCr(const modint& n, const modint& r);
	static void init_nCr();
};

const std::int64_t modint::modulo = 1000000007;
vector<modint> modint::fac;
vector<modint> modint::fac_inv;
/* Arithmetic */
const modint operator*(const modint& m1, const modint& m2) { return modint(m1) *= m2; }
const modint operator/(const modint& m1, const modint& m2) { return modint(m1) /= m2; }
const modint operator%(const modint& m1, const modint& m2) { return modint(m1) %= m2; }
const modint operator+(const modint& m1, const modint& m2) { return modint(m1) += m2; }
const modint operator-(const modint& m1, const modint& m2) { return modint(m1) -= m2; }
const modint operator*(const modint& m, const std::int64_t& i) { return modint(m) *= i; }
const modint operator/(const modint& m, const std::int64_t& i) { return modint(m) /= i; }
const modint operator%(const modint& m, const std::int64_t& i) { return modint(m) %= i; }
const modint operator+(const modint& m, const std::int64_t& i) { return modint(m) += i; }
const modint operator-(const modint& m, const std::int64_t& i) { return modint(m) -= i; }
const modint operator*(const std::int64_t& i, const modint& m) { return modint(i) *= m; }
const modint operator/(const std::int64_t& i, const modint& m) { return modint(i) /= m; }
const modint operator%(const std::int64_t& i, const modint& m) { return modint(i) %= m; }
const modint operator+(const std::int64_t& i, const modint& m) { return modint(i) += m; }
const modint operator-(const std::int64_t& i, const modint& m) { return modint(i) -= m; }
/* Shift (iostream) */
std::ostream& operator<<(std::ostream& os, const modint m) { os << m.get(); return os; }
std::istream& operator>>(std::istream& is, modint& m) { std::int64_t i; is >> i; m.set(i); return is; }
/* Compare */
bool operator<(const modint& m1, const modint& m2) { return m1.get() < m2.get(); }
bool operator>(const modint& m1, const modint& m2) { return m2 < m1; }
bool operator<=(const modint& m1, const modint& m2) { return !(m1 > m2); }
bool operator>=(const modint& m1, const modint& m2) { return !(m1 < m2); }
bool operator==(const modint& m1, const modint& m2) { return !(m1 < m2) && !(m1 > m2); }
bool operator!=(const modint& m1, const modint& m2) { return !(m1 == m2); }
/* Power (evil implementation) */
modint operator^(const modint& m1, const modint& m2) { return modint::pow(m1, m2); };

modint modint::nCr(const modint& n, const modint& r) {
	init_nCr();
	if(n < r) return 0;
	return fac[n.get()] * fac_inv[r.get()] * fac_inv[n.get() - r.get()];
}

void modint::init_nCr() {
	static bool is_initted = false;
	if(is_initted) return;
	is_initted = true;

	const std::int64_t max_fac = 510000; // 510000 とする理由は不明。十分な上限値として与えている？
	
	fac     = vector<modint>(max_fac);
	fac[0] = fac[1] = 1;
	for(std::int64_t i = 2; i < max_fac; ++i) {
		fac[i] = fac[i - 1] * i;
	}

	fac_inv = vector<modint>(max_fac);
	fac_inv[0] = fac_inv[1] = 1;
	fac_inv[max_fac - 1] = inv(fac[max_fac - 1]);
	for(std::int64_t i = max_fac - 2; i >= 0; --i) {
		fac_inv[i] = fac_inv[i + 1] * (i + 1);
	}
}

int main(int argc, const char* argv[]) {
	modint n, k;
	cin >> n >> k;

	cout << (n-k+1) << endl;
	repd(i, 2, modint(k + 1)) {
		/*
		   i 回操作する時:
		       n - k 個の red を、i + 1 個の場所に分ける。
		       この時、両端の2箇所は red が 0 個でも良いが、他の i - 1 部屋は 1 個以上必要。
		       つまり、n - k - 2 個の red を区別のある i + 1 部屋に分ける。

		       あと、k 個の blue を区別のある i 部屋に分ける。空部屋はなし。
		 */
		modint red  = modint::nCr( (n-k-(i-1)) + i, i);
		modint blue = modint::nCr(k-1, i-1);
		cout << red * blue << endl;

		if(i == 2) {
			debug((n-k-(i-1)) + (i+1));
		}

		cerr << i << ": ";debug(red);
		cerr << i << ": ";debug(blue);
	}



	return 0;
}


Measured memory_bytes: 8192