#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';
}
}