#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=105;
const int mod=1000000007;

//int qpow(int a,int x){
//	int s=a;int ret=1;
//	while(x>0){
//		ret*=s*(x%2);
//		s=s*s;
//	}
//	return ret;
//}

struct Matrix{
	int r;
	int a[maxn][maxn];
	/*Matrix operator + (Matrix &o){
		Matrix ans;ans.r=r;
		for(int i=1;i<=r;i++){
			for(int j=1;j<=r;j++){
				ans.a[i][j]=(a[i][j]+o.a[i][j])%mod;
			}
		}
		return ans;
	}
	*/
};
Matrix multiply(Matrix p,Matrix o){
	Matrix ans;ans.r=p.r;
	for(int i=1;i<=p.r;i++){
		for(int j=1;j<=p.r;j++){
			int sum=0;
			for(int x=1;x<=p.r;x++){
				sum+=p.a[i][x]*o.a[x][j];sum%=mod;
			}
			ans.a[i][j]=sum;
		}
	}
	return ans;
}
Matrix qpow(Matrix t,int x){
	Matrix ret;ret.r=t.r;
	Matrix tmp;tmp.r=t.r;
	for(int i=1;i<=t.r;i++){
		for(int j=1;j<=t.r;j++){
			ret.a[i][j]=(i==j);
			tmp.a[i][j]=t.a[i][j];
		}
	}
	while(x>0){
		if(x%2==1)ret=multiply(ret,tmp);
		tmp=multiply(tmp,tmp);
		x/=2;
	}
	return ret;
}

signed main(){
	int n,k;
	cin>>n>>k;
	Matrix x;x.r=n;
	x.a={{},{}};
	Matrix ans=qpow(x,k);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<ans.a[i][j]<<' ';
		}
		cout<<'\n';
	}
}