import std.stdio, std.string, std.conv;

void main() {
    int[] tmp = readln.split.to!(int[]);
    int n = tmp[0], k = tmp[1];
    long mod = 1_000_000_007;
    long[] fac = new long[n+1];
    long[] finv = new long[n+1];
    long[] inv = new long[n+1];
    fac[0] = 1, fac[1] = 1;
    finv[0] = 1, finv[1] = 1;
    inv[1] = 1;
    foreach (i; 2 .. n+1) {
        fac[i] = fac[i-1] * i % mod;
        inv[i] = mod - inv[mod%i] * (mod / i) % mod;
        finv[i] = finv[i-1] * inv[i] % mod;
    }
    long comb(int x, int y) {
        if (x < y) return 0;
        if (x < 0 || y < 0) return 0;
        return fac[x] * (finv[y] * finv[x-y] % mod) % mod;
    }
    foreach (i; 0 .. k) {
        writeln((comb(n-k+1, i+1) * comb(k-1, i)) % mod);
    }
}