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 + n);

    long f(int n, int m) { return C[n+m-1][m-1]; }

    int red = n - k;
    int blue = k;
    for (int i = 1; i <= k; i++) {
        long ans = 0;

        // 青, 赤, ..., 青, [赤]
        int r = red - (i - 1);
        int b = blue - i;

        long x = max(1, f(b, i)) * max(1, f(r, i)) % MOD;

        int r2 = red - i;
        int b2 = blue - i;
        long y = 0;
        if (r2 >= 0 && b2 >= 0) {
            y = max(1, f(b, i)) * max(1, f(r2, i + 1)) % MOD;
        }

        ans = (ans + x) % MOD;
        ans = (ans + y) % MOD;
        writeln(ans);
    }
}

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