#include <bits/stdc++.h>
#define FstIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define pii pair <ll, ll>
#define pb push_back
#define mtp make_tuple
#define mem(a, v) memset(a, v, sizeof a)
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
const ll N = 3e2 + 5, M = 4e3 + 2;
const ll inf = 1e18;
const ld eps = 1e-6;
const ll mod = 1e9 + 7;
ll n, k;
struct matrix
{
ll A[N][N];
void build()
{
for (ll i = 1; i <= n; ++ i )
for (ll j = 1; j <= n; ++ j )
A[i][j] = 0;
}
void init()
{
for (ll i = 1; i <= n; ++ i ) A[i][i] = 1;
}
} ;
matrix operator * (const matrix &x, const matrix &y)
{
matrix t; t.build();
for (ll i = 1; i <= n; ++ i )
for (ll j = 1; j <= n; ++ j )
for (ll k = 1; k <= n; ++ k )
t.A[i][j] = (t.A[i][j] + x.A[i][k] * y.A[k][j]) % mod;
return t;
}
matrix qpow(matrix x, ll p)
{
matrix s; s.build(); s.init();
while (p)
{
if (p & 1) s = s * x;
x = x * x;
p >>= 1;
}
return s;
}
signed main()
{
FstIO;
cin >> n >> k;
matrix p; p.build();
for (ll i = 1; i <= n; ++ i )
for (ll j = 1; j <= n; ++ j )
cin >> p.A[i][j];
p = qpow(p, k);
for (ll i = 1; i <= n; ++ i )
{
for (ll j = 1; j <= n; ++ j )
cout << p.A[i][j] << ' ';
cout << '\n';
}
return 0;
cout.flush();
}