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) {
    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;
}

long[][] C;

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

    int red = n - k;
    int blue = k;
    for (int i = 1; i <= k; i++) {
        // すき間のどこに入れるか
        long x = C[n - k + 1][i];

        // i 個のすき間にボールを入れる
        // 最低 1 つは入れる必要があるので、あらかじめ i 個分を引く
        long y = C[k - i + i - 1][i - 1];
        writeln(x * y % MOD);
    }
}

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