#include<bits/stdc++.h>
using namespace std;
const int ljc=1e9+7;
struct data{//矩阵
long long z[110][110];
data() { memset(z,0,sizeof(z)); }
}a;
int n;
long long k;
data cheng(const data &_a,const data &_b){//矩阵乘法
data _ans;
for(int _i=1;_i<=n;_i++)
for(int _j=1;_j<=n;_j++)
for(int _k=1;_k<=n;_k++)
(_ans.z[_i][_j]+=_a.z[_i][_k]*_b.z[_k][_j])%=ljc;
return _ans;
}
void pt(data _a){//输出矩阵
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<_a.z[i][j]<<‘ ‘;
cout<<endl;
}
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%lld",&a.z[i][j]);
data ans;
for(int i=1;i<=n;i++) ans.z[i][i]=1;
while(k){//快速幂
if(k%2)ans=cheng(a,ans);
k/=2;
a=cheng(a,a);
}
pt(ans);
}