#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const ll mod=1000000007;
ll n,k;
inline ll rd()
{
ll s=0,w=1;
char x='x';
while(x<'0'||x>'9'){x=getchar();if(x=='-')w=-1;}
while(x>='0'&&x<='9'){s=(s*10+(x^48))%1000000007;x=getchar();}
return s*w;
}
struct node
{
ll a[105][105];
node()
{
memset(a,0,sizeof a);
}
}a,ans;
node mul(node x,node y)
{
node z;
ll i,j,l;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(l=1;l<=n;l++)
z.a[i][j]=(z.a[i][j]+x.a[i][l]*y.a[l][j]%mod)%mod;
return z;
}
int main()
{
n=rd();
k=rd();
ll i,j,l;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
a.a[i][j]=rd();
ans.a[i][i]=1;//单位矩阵
}
while(k!=0)
{
if(k&1==1)
ans=mul(ans,a);
a=mul(a,a);
k>>=1;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%lld ",ans.a[i][j]);
printf("\n");
}
return 0;
}