#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll read(){
ll res=0;short int op=1;char ch=getchar();
while(ch<'0'||'9'<ch){if(ch=='-')op=-op;ch=getchar();}
while('0'<=ch&&ch<='9'){res=res*10+ch-'0';ch=getchar();}
return res*op;
}
void write(ll x){
if(x<0){putchar('-');x=-x;}
if(x>9)write(x/10);
putchar(x%10+'0');
}
const int N=110,P=1e9+7;
struct matrix{
int spa;
ll dat[N][N];
void _(){//造单位矩阵
memset(dat,0,sizeof dat);
for(int i=1;i<=spa;i++)dat[i][i]=1;
}
matrix operator*(const matrix &b){
matrix res;
res.spa=spa;
for(int i=1;i<=spa;i++){
for(int _=1;_<=spa;_++){
for(int j=1;j<=spa;j++){
res.dat[i][j]=(res.dat[i][j]+dat[i][_]*b.dat[_][j]%P)%P;
}
}
}
return res;
}
};
matrix pow(matrix x,int n){//快速幂
matrix res=x;
res._();
while(n){
if(n&1)res=res*x;
n>>=1;
x=x*x;
}
return res;
}
int main(){
int n,k;
matrix x;
cin>>n>>k;
x.spa=n;
for(int i=1;i<=x.spa;i++){//读入
for(int j=1;j<=x.spa;j++){
x.dat[i][j]=read();
}
}
matrix res=pow(x,k);
for(int i=1;i<=res.spa;i++){//输出
for(int j=1;j<=res.spa;j++){
write(res.dat[i][j]);putchar(' ');
}
putchar('\n');
}
return 0;
}