using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Collections;

static class Extensions
{
    public static int ToInt(this string s) => int.Parse(s);
    public static long ToLong(this string s) => long.Parse(s);
    public static char ToChar(this string s) => char.Parse(s);
    public static double ToDouble(this string s) => double.Parse(s);
    public static int[] ToIntArray(this string s) => s.Replace(',', ' ').Split(' ').Select(x => x.ToInt()).ToArray();
    public static long[] ToLongArray(this string s) => s.Replace(',', ' ').Split(' ').Select(x => x.ToLong()).ToArray();
    public static double[] ToDoubleArray(this string s) => s.Replace(',', ' ').Split(' ').Select(x => x.ToDouble()).ToArray();
    public static Queue<T> ToQueue<T>(this IEnumerable<T> seq) => new Queue<T>(seq);
    public static Stack<T> ToStack<T>(this IEnumerable<T> seq) => new Stack<T>(seq);
    public static HashSet<T> ToHashSet<T>(this IEnumerable<T> seq) => new HashSet<T>(seq);
}
static class MyMath
{
    static private long gcdInner(long a, long b) => (a % b == 0) ? b : gcdInner(b, a % b);
    static public long GCD(long a, long b) => (a > b) ? gcdInner(a, b) : gcdInner(b, a);
    static public long LCM(long a, long b) => (a > b) ? (a / GCD(a, b) * b) : (b / GCD(a, b) * a);
    static private readonly long _m = 1000000000 + 7;
    static public long Mod(long val) => (val % _m + _m) % _m;
    static private long extGCD(long a, long b, ref long x, ref long y) => (b == 0) ? (a + (x = 1) * 0 + (y = 0) * 0) : (extGCD(b, a % b, ref y, ref x) + (y -= a / b * x) * 0);
    static public long getGyakuGen(long a, long dummy1 = 0, long dummy2 = 0) => extGCD(a, _m, ref dummy1, ref dummy2) * 0 + Mod(dummy1);    
}

class Program
{
    static string[] ReadLines(int n) => Enumerable.Range(0, n).Select(s => Console.ReadLine()).ToArray();

    static long mmmmmm = 1000000000 + 7;

    static void Main()
    {        
        //Nのかいじょうまでを計算できるようにしておく。
        //また、Nのかいじょうまでの逆元を計算できるようにしておく

        int[] nk = Console.ReadLine().ToIntArray();

        int N = nk[0];
        int K = nk[1];

        long[] Kaijou = new long[N + 1];
        long[] Gyaku = new long[N + 1];

        Kaijou[0] = 1;

        for(int i = 1; i <= N; i++)
        {
            Kaijou[i] = Kaijou[i - 1] * i;
            Kaijou[i] = MyMath.Mod(Kaijou[i]);
        }

        for(int i = 0; i <= N; i++)
        {
            Gyaku[i] = MyMath.getGyakuGen(Kaijou[i]);
        }



        for(int i = 1; i <= K; i++)
        {
            if (i > N - K + 1)
            {
                Console.WriteLine(0);
                continue;
            }

            long ans = Kaijou[N - K + 1];
            ans = MyMath.Mod(ans);
            ans *= Kaijou[K - 1];
            ans = MyMath.Mod(ans);
            ans *= Gyaku[i];
            ans = MyMath.Mod(ans);
            ans *= Gyaku[N - K + 1 - i];
            ans = MyMath.Mod(ans);
            ans *= Gyaku[K - i];
            ans = MyMath.Mod(ans);
            ans *= Gyaku[i - 1];
            ans = MyMath.Mod(ans);

            Console.WriteLine(ans);
        }


    }
}

Measured memory_bytes: 13396