import std.stdio, std.math, std.algorithm, std.array, std.string, std.conv, std.container, std.range;
T[] Reads(T)() { return readln.split.to!(T[]); }
alias reads = Reads!int;
pragma(inline, true) void scan(Args...)(ref Args args) {
    string[] ss = readln.split;
    foreach (i, ref arg ; args)
        arg = ss[i].parse!int;
}


enum MOD = 10^^9 + 7;
pragma(inline, true)
int mul(long x, long y) {
    return (x * y) % MOD;
}

int[] f;
void make_table(int n) {
    f = new int[n + 1];
    f[0] = f[1] = 1;
    foreach (i ; 2..n+1)
        f[i] = mul(i, f[i-1]);
}

int powmod(S,T,U)(S x, T n, U MOD) {
    int r = 1;
    while (n > 0) {
        if (n & 1) r = mul(r, x);
        x = mul(x, x);
        n >>= 1;
    }
    return r;
}

pragma(inline, true)
int mod_inv(int x) {
    return powmod(x, MOD - 2, MOD);
}

pragma(inline, true)
int comb(int n, int r) {
    if (n - r < 0 || n < 0 || r < 0) return 0;
    return mul(mul(f[n], f[r].mod_inv), f[n - r].mod_inv);
}

void main() {
    int n, k;
    scan(n, k);
    make_table(2010);
    foreach (i; 1..k+1) {
        int x = mul(comb(n-k+1, i), comb(k-1, i-1));
        writeln(x);
    }
}