#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#define mm 1000000007
using namespace std;
typedef long long ll;
ll n,k;
struct node
{
ll G[105][105];
}A,ans;
node operator *(node p,node q)
{
node x;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= 1;j++)
{
x.G[i][j] = 0;
}
}
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
for(int h = 1;h <= n;h++)
{
x.G[i][j] = (x.G[i][j] + (p.G[i][h] * q.G[h][j]) % mm) % mm;
}
}
}
return x;
}
node fun(node x,long long b)
{
if(b == 0)
{
node unit_matrix;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
if(i == j)
{
unit_matrix.G[i][j] = 1;
}
else
{
unit_matrix.G[i][j] = 0;
}
}
}
return unit_matrix;
}
else if(b == 1)
{
return x;
}
if(b & 1)
{
return x * fun(x,b-1);
}
else
{
node r = x * fun(x,b/2);
return r * r;
}
}
int main(void)
{
cin>>n>>k;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
cin>>A.G[i][j];
}
}
ans = fun(A,k);
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
cout<<ans.G[i][j]<<" ";
}
cout<<endl;
}
return 0;
}