using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Globalization;
using System.Diagnostics;
using System.Threading.Tasks;

class Sobaya
{
    const long MOD = 1000000007;
    const int MAX_C = 2002;
    long[,] Com = new long[MAX_C, MAX_C];
    
    void calc_com() {
        Com[0,0] = 1;
        for (int i = 1; i < MAX_C; ++i) {
            Com[i,0] = 1;
            for (int j = 1; j < MAX_C; ++j) {
                Com[i,j] = (Com[i-1,j-1] + Com[i-1,j]) % MOD;
            }
            Com[i,i] = 1;
        }
    }
    
    static void Main(){
      new Sobaya().calc();
      return;
    }
      
    Scanner cin;
    
    void calc(){
        cin = new Scanner();
        long[] std = cin.ArrayLong(2);
        
        long n = std[0];
        long k = std[1];
        long i1, ii, v1;
        long[] prep = new long[n];
        int mod = 1000000007;
        
        v1 = 1;
        for(i1 = 0; i1<n; i1++){
            ii = i1+1;
            v1 = (v1*ii) % mod;
            prep[i1] = v1;
        }
        
        calc_com();
        
        long ans=0;
        for(i1=1; i1<=k; i1++) {
            ans = 0;
            // both side red
            // red divided to i1+1 space
            // red total n-k balls
            // free red ball n-k-(i1+1) balls remained
            // sikiri: i1
            // n-k-1 C i1
            // blue total k balls to i1 space
            // blue free k-i1 and i1-1 sikiri
            if(n-k < i1+1) ans+=0;
            else ans+= (Com[n-k-1,i1] * Com[k-1,i1-1])%mod;
            // red divided to i1 space
            // red total n-k balls
            // n-k-i1 balls into sikiri i1-1
            if(n-k < i1) ans+=0;
            else ans+= 2*(Com[n-k-1,i1-1] * Com[k-1,i1-1])%mod;
            // both side blue
            if(i1==1 && n==k) ans+=1;
            else if(n-k < i1-1 || i1==1) ans+=0;
            else ans+= (Com[n-k-1,i1-2] * Com[k-1,i1-1])%mod;
            
            Console.WriteLine(ans%mod);
        }
        //Console.WriteLine(string.Join(" ",prep));
    }
}




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 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: 44248