using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Numerics;


class Program
{
    const long MOD = 1000000007L;
    static void Main(string[] args)
    {
        new Program().Solve();
    }

    void Solve()
    {
        Scanner cin = new Scanner();
        int n = cin.NextInt();
        int k = cin.NextInt();

        var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
        Console.SetOut(sw);
        long init = n - k + 1;

        CombinationManager c = new CombinationManager();
        c.BuildPascalTriangle(n, MOD);

        for (int i = 1; i <= k; i++)
        {
            long ans = c.Get(n - k + 1, i) * c.Get(k - 1, i - 1) % MOD;
            Console.WriteLine(ans);
        }
        Console.Out.Flush();
    }
}

class CombinationManager
{
    private long[,] c;

    public CombinationManager()
    {
    }

    private long[,] CreateInitialMultDimArray(int row, int col, long initialValue)
    {
        long[,] matrix = new long[row + 10, col + 10];
        var sequence = from x in Enumerable.Range(0, row)
                       from y in Enumerable.Range(0, col)
                       select new { x, y };
        foreach (var index in sequence)
        {
            matrix[index.x, index.y] = initialValue;
        }
        return matrix;
    }

    public void BuildPascalTriangleWithMod(int depth, long mod)
    {
        throw new NotImplementedException();
    }

    public long Get(int n, int k)
    {
        return c[n, k];
    }

    internal void BuildPascalTriangle(int depth, long mod)
    {
        c = CreateInitialMultDimArray(depth, depth, 0L);
        c[0, 0] = 1;
        c[1, 0] = 1;
        c[1, 1] = 1;
        for (int i = 2; i < depth; i++)
        {
            for (int j = 0; j < depth; j++)
            {
                if (j > 0)
                {
                    c[i, j] = (c[i - 1, j] + c[i - 1, j - 1]) % mod;
                }
                else
                {
                    c[i, j] = c[i - 1, j];
                }
            }
        }
    }
}

class Scanner
{
    string[] s;
    int i;

    char[] cs = new char[] { ' ' };

    public Scanner()
    {
        s = new string[0];
        i = 0;
    }

    public string Next()
    {
        if (i < s.Length) return s[i++];
        string st = Console.ReadLine();
        while (st == "") st = Console.ReadLine();
        s = st.Split(cs, StringSplitOptions.RemoveEmptyEntries);
        if (s.Length == 0) return Next();
        i = 0;
        return s[i++];
    }

    public int NextInt()
    {
        return int.Parse(Next());
    }

    public char[] ArrayChar()
    {
        return Next().ToCharArray();
    }
    public int[] ArrayInt(int N, int add = 0)
    {
        int[] Array = new int[N];
        for (int i = 0; i < N; i++)
        {
            Array[i] = NextInt() + add;
        }
        return Array;
    }

    public long NextLong()
    {
        return long.Parse(Next());
    }

    public long[] ArrayLong(int N, long add = 0)
    {
        long[] Array = new long[N];
        for (int i = 0; i < N; i++)
        {
            Array[i] = NextLong() + add;
        }
        return Array;
    }

    public double NextDouble()
    {
        return double.Parse(Next());
    }


    public double[] ArrayDouble(int N, double add = 0)
    {
        double[] Array = new double[N];
        for (int i = 0; i < N; i++)
        {
            Array[i] = NextDouble() + add;
        }
        return Array;
    }
}



Measured memory_bytes: 46728