#include<iostream>
using namespace std;
int main()
{
int a[30][30],b[30][30]={0},c[30][30]={0},i,j,N,M,k,p,t;
cin>>N>>M; //N为阶数, N阶矩阵A的 M次幂
for(i=0;i<N;i++)
for(j=0;j<N;j++) cin>>a[i][j];
for(k=2;k<=M;k++)
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[i][j]=a[i][j];
if(M==0) { //此时为单位矩阵
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i==j) c[i][j]=1;
}
else if(M==1) {
for(i=0;i<N;i++)
for(j=0;j<N;j++)
c[i][j]=a[i][j];
}
else {
for(k=2;k<=M;k++) //相乘的次数即幂
{ for(i=0;i<N;i++)
for(j=0;j<N;j++)
{t=0;
for(p=0;p<N;p++) //遍历对应元素的相乘
t=t+a[i][p]*b[p][j]; //求出矩阵c的一个元素 ,b[i][j]为每次相乘的结果 ,而且需得每次整个矩阵相乘完才能让 c[i][j] 赋值
c[i][j]=t;
}
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[i][j]=c[i][j];
}
}
//多重for循环:自上而下 再 从下往上 !!
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
cout<<c[i][j]<<" ";
cout<<endl;
}
return 0;
}