#include <iostream>
#define MAXN 1005
#define int long long
#define init int
#define MOD 1000000007
using namespace std;
int n , k;
struct matr
{
long long N , K;
int a[MAXN][MAXN];
void clear()
{
for(int i = 1;i <= N;++ i)
{
for(int j = 1;j <= N;++ j)
{
a[i][j] = 0;
}
}
}
void m_in()
{
for(int i = 1;i <= N;++ i)
{
for(int j = 1;j <= N;j ++)
{
cin >> a[i][j];
}
}
}
void m_out()
{
for(int i = 1;i <= N;++ i)
{
for(int j = 1;j <= N;++ j)
{
cout << a[i][j] << " ";
}
cout << endl;
}
}
}answer;
matr operator * (matr A,matr X)
{
matr ans = A;
for (int i = 1;i <= X.N;++ i)
{
for (int l = 1;l <= X.N;++ l)
{
int t = A.a[i][l];
for (int j = 1;j <= X.N;++ j)
{
ans.a[i][j] += (t * ans.a[l][j]) % MOD;
ans.a[i][j] %= MOD;
}
}
}
return ans;
}
matr operator + (matr A,matr X)
{
matr ans = A;
for (int i = 1;i <= X.N;++ i)
{
for (int j = 1;j <= X.N;++ j)
{
ans.a[i][j] = (ans.a[i][j] + X.a[i][j]) % MOD;
}
}
return ans;
}
void fastPower()
{
matr ans = answer;
ans.clear();
for (int i = 1; i <= ans.N; ++ i)
ans.a[i][i] = 1;
do
{
if (answer.K & 1)
ans = ans * answer;
answer = answer * answer;
answer.K >>= 1;
}while (answer.K)
ans.m_out();
}
unsigned main()
{
matr lyy;
cin >> lyy.N >> lyy.K;
lyy.m_in();
fastPower();
return 0;
}