import std.algorithm;
import std.array;
import std.container;
import std.conv;
import std.math;
import std.numeric;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

void scan(T...)(ref T a) {
    string[] ss = readln.split;
    foreach (i, t; T) a[i] = ss[i].to!t;
}
T read(T)() { return readln.chomp.to!T; }
T[] reads(T)() { return readln.split.to!(T[]); }
alias readint = read!int;
alias readints = reads!int;

const MOD = 10^^9 + 7;

long[][] pascal(int n, int mod) {
    auto g = new long[][](n + 1, n + 1);
    g[0][0] = 1;
    for (int i = 1; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            g[i][j] = g[i-1][j];
            if (j > 0) {
                g[i][j] += g[i-1][j-1];
                g[i][j] %= mod;
            }
        }
    }
    return g;
}

void calc(int n, int k) {
    auto C = pascal(n + n, MOD);

    for (int i = 1; i <= k; i++) {
        // N - K 個の赤ボールのすき間から i 箇所を選ぶ
        long x = C[n - k + 1][i];

        // K 個の青ボールを i 箇所に配る配り方
        // H(i, K - i) = nck(i + K - i - 1, K - i)
        long y = C[k - 1][k - i];
        writeln(x * y % MOD);
    }
}

void main() {
    int n, k; scan(n, k);
    calc(n, k);
}
