#include<bits/stdc++.h>
using namespace std;
#define REP(i,n) for(long long i=0;i<n;i++)
#define REP1(i,n) for(long long i=1;i<=n;i++)
#define REP2D(i,j,h,w) for(long long i=0;i<h;i++) for(long long j=0;j<w;j++)
#define REP2D1(i,j,h,w) for(long long i=1;i<=h;i++) for(long long j=1;j<=w;j++)
#define PER(i,n) for(long long i=((n)-1);i>=0;i--)
#define PER1(i,n) for(long long i=(n);i>0;i--)
#define REPB(i,n) for(long long i=((n)-1);i>=0;i--)
#define REPB1(i,n) for(long long i=(n);i>0;i--)
#define FOR(i,a,b) for(long long i=(a);i<(b);i++)
#define FORE(i,a,b) for(long long i=(a);i<=(b);i++)
#define ITE(arr) for(auto ite=(arr).begin();ite!=(arr).end();++ite)
#define ALL(a) (a.begin()),(a.end())
#define RANGE(a) (a),(a+sizeof(a))
#define ZERO(a) memset(a,0,sizeof(a))
#define MINUS(a) memset(a,0xff,sizeof(a))
#define YNPRT(b) cout<<((b)?"Yes":"No")<<endl
#define REV(arr) reverse(ALL(arr))
#define PRT(a) cout<<a<<endl;
#define PRTLST(arr,num) REP(_i,num) cout<<_i<<" - "<<arr[_i]<<endl;
#define PRTLST2(arr2,d1,d2) REP(_i,d1) REP(_j,d2) cout<<_i<<","<<_j<<" : "<<arr2[_i][_j]<<endl;
#define PRTLST2D(arr2,d1,d2) do{cout<<"L\t";REP(_i,d2) cout<<_i<<"\t"; cout<<endl; REP(_i,d1){cout<<_i<<"\t";REP(_j,d2){cout<<arr2[_i][_j]<<"\t";}cout<<endl;}}while(0);
#define MIN(target,v1) (target)=min(target,v1)
#define MAX(target,v1) (target)=max(target,v1) 
#define P1 first
#define P2 second
#define PB push_back
#define UB upper_bound
#define LB lower_bound
typedef long long ll;
typedef pair<int,int> pii;
//---------------------
#define MOD 1000000007
#define MAXN 2000
//---------------------
ll inv[MAXN];
ll fac[MAXN];
ll facinv[MAXN];


ll modpow(ll a, ll b){
  	if(b==-1) return inv[a];
  	if(b<-1) {
  		a=inv[a%MOD];
  		b*=-1;
  	}
	if(b==0) return 1;
	if(b==1) return a%MOD;
	ll ret=modpow(a%MOD,b>>1)%MOD;
	return (ret*ret%MOD)*((b%2)?(a%MOD):1)%MOD;
}

ll fermat(ll a){
  	if(a%MOD) return -1;
	return modpow(a,MOD-2);
}

inline ll modmult(ll a, ll b){
	return (a%MOD)*(b%MOD)%MOD;
}

inline ll modmult(ll a, ll b ,ll c){
	return (a%MOD)*(b%MOD)%MOD*(c%MOD)%MOD;
}


inline ll modfact(ll n){
	if(n==0 || n==1) return 1;
	if(n>=MOD) return 0;
	return fac[n];
}

inline ll modcomb(ll m, ll n){
  	if(m>=MOD || n>=MOD || n<0 || m<0) return -1;
  	if(n==0||n==m) return 1;
  	if(m<n) return 0;
	return fac[m]*facinv[m-n]%MOD*facinv[n]%MOD;
}
      
void makelist(){
  	inv[0]=-1;
  	inv[1]=1;
	for(ll i=2;i<MAXN;i++) inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD;
	fac[0]=1;
	REP1(i,MAXN) fac[i]=(fac[i-1]*i)%MOD;
	facinv[MAXN-1] = modpow(fac[MAXN-1],MOD-2);
	REPB(i,MAXN-1) facinv[i]=(facinv[i+1]*(i+1))%MOD;
}


void makepowlist(ll *list,ll a,ll num){
	list[0]=1;
	REP1(i,num-1){
		list[i] = modmult(list[i-1],a);
	}
}


void makepowinvlist(ll *list, ll a,ll num){
	list[0]=1;
	REP1(i,num-1){
		list[i] = modmult(list[i-1],inv[a]);
	}
}

int n,k,h[MAXN+1];
int dp[MAXN+1][MAXN+1];
void makeh(){
	ZERO(h);
	dp[0][0]=1;
	FORE(i,1,k){
		FORE(j,0,k){
			if(j-i>=0){
				dp[i][j]=(dp[i-1][j]+dp[i][j-i])%MOD;
			}
			else {
				dp[i][j] = dp[i-1][j];
			}
		}
	}
	h[0]=0;
	REP1(i,k){
		h[i]=(dp[k][i]-dp[k][i-1]+MOD)%MOD;
		//cout<<"w "<<h[i]<<endl;
	}
}

int getI(int i){
	return modmult(modcomb(n-k+i,i),h[i],fac[i]);
}

int main(){
  	makelist();
	cin>>n>>k;
	//makeh();
	REP1(i,k)	cout<< modmult(modcomb(n-k+1,i),modcomb(k-1,i-1)) <<endl;
	//REP1(i,k) {cout<<n-k+1<<" "<<i<<endl; ;cout<<modcomb(n-k+1,i)<<" "<<modcomb(k-1,i-1)<<endl;}
	return 0;
}

Measured memory_bytes: 256