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;
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)
long mul(long x, long y) {
    return (x * (y % MOD)) % MOD;
}

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

long mod_pow(long x, long n) {
    long r = 1;
    while (n > 0) {
        if (n & 1) r = mul(r, x);
        x = mul(x, x);
        n >>= 1;
    }
    return r;
}

long mod_inv(long x) {
    return mod_pow(x, MOD - 2) % MOD;
}

long comb(long n, long r) {
    return mul(mul(f[n], f[r].mod_inv), f[n - r].mod_inv);
}

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