#include<bits/stdc++.h> usingnamespace std; using ll = longlong;
constint maxsz = 100 + 5;
ll n, mod, p, q, a1, a2;
structMatrix { ll m[maxsz][maxsz]; int sz; Matrix( int s = 0 ) : sz( s ) { memset( m, 0, sizeof( m ) ); } voidinit( ){ for( int i = 1; i <= sz; ++ i ) m[i][i] = 1; }
friend Matrix operator * ( const Matrix &a, const Matrix &b ) { Matrix res( a.sz ); for( int i = 1; i <= res.sz; ++ i ) { for( int k = 1; k <= res.sz; ++ k ) { if( a.m[i][k] == 0 ) continue; for( int j = 1; j <= res.sz; ++ j ) res.m[i][j] = ( res.m[i][j] + a.m[i][k] * b.m[k][j] ) % mod; } } return res; } };
Matrix mqpow( Matrix a, ll k ) { Matrix res( a.sz ); res.init( ); for( ; k; k >>= 1, a = a * a ) if( k & 1 ) res = res * a; return res; }
#include<bits/stdc++.h> usingnamespace std; using ll = longlong;
constint maxsz = 5; constint maxn = 100 + 5;
ll dp[maxn]; ll n, mod;
structMatrix { ll m[maxsz][maxsz]; int sz; Matrix( int s = 0 ) : sz( s ) { memset( m, 0, sizeof( m ) ); } voidinit( ){ for( int i = 1; i <= sz; ++ i ) m[i][i] = 1; }
friend Matrix operator * ( const Matrix &a, const Matrix &b ) { Matrix res( a.sz ); for( int i = 1; i <= res.sz; ++ i ) { for( int k = 1; k <= res.sz; ++ k ) { if( a.m[i][k] == 0 ) continue; for( int j = 1; j <= res.sz; ++ j ) res.m[i][j] = ( res.m[i][j] + a.m[i][k] * b.m[k][j] ) % mod; } } return res; } };
Matrix mqpow( Matrix a, ll k ) { Matrix res( a.sz ); res.init( ); for( ; k; k >>= 1, a = a * a ) if( k & 1 ) res = res * a; return res; }
ll qpow( ll a, ll k ){ ll res = 1; for( ; k; k >>= 1, a = a * a % mod ) if( k & 1 ) res = res * a % mod; return res; }
structMatrix { ll m[maxsz][maxsz]; int sz; Matrix( int s = 0 ) : sz( s ) { memset( m, 0, sizeof( m ) ); } voidinit( ){ for( int i = 1; i <= sz; ++ i ) m[i][i] = 1; }
friend Matrix operator * ( const Matrix &a, const Matrix &b ) { Matrix res( a.sz ); for( int i = 1; i <= res.sz; ++ i ) { for( int k = 1; k <= res.sz; ++ k ) { if( a.m[i][k] == 0 ) continue; for( int j = 1; j <= res.sz; ++ j ) res.m[i][j] = ( res.m[i][j] + a.m[i][k] * b.m[k][j] ) % mod; } } return res; } };
Matrix mqpow( Matrix a, ll k ) { Matrix res( a.sz ); res.init( ); for( ; k; k >>= 1, a = a * a ) if( k & 1 ) res = res * a; return res; }
structEdge { int u, v; } e[maxm << 1]; int cnt = 0;
int n, m, t, st, ed;
structMatrix { ll m[maxsz][maxsz]; int sz; Matrix( int s = 0 ) : sz( s ) { memset( m, 0, sizeof( m ) ); } voidinit( ){ for( int i = 0; i < sz; ++ i ) m[i][i] = 1; }
friend Matrix operator * ( const Matrix &a, const Matrix &b ) { Matrix res( a.sz ); for( int i = 0; i < res.sz; ++ i ) { for( int k = 0; k < res.sz; ++ k ) { if( a.m[i][k] == 0 ) continue; for( int j = 0; j < res.sz; ++ j ) res.m[i][j] = ( res.m[i][j] + a.m[i][k] * b.m[k][j] ) % mod; } } return res; } };
Matrix mqpow( Matrix a, ll k ) { Matrix res( a.sz ); res.init( ); for( ; k; k >>= 1, a = a * a ) if( k & 1 ) res = res * a; return res; }
// (min, +) 矩阵乘法 Mat mul( const Mat &A, const Mat &B ) { Mat res; for( int k = 1; k <= n; ++ k ) { for( int i = 1; i <= n; ++ i ) { if( A.mat[i][k] == inf ) continue; for( int j = 1; j <= n; ++ j ) { if( B.mat[k][j] == inf ) continue; res.mat[i][j] = min( res.mat[i][j], A.mat[i][k] + B.mat[k][j] ); } } } return res; } // 矩阵快速幂 Mat pow( Mat A, ll k ) { Mat res = A; while( k ) { if( k & 1 ) res = mul( res, A ); A = mul( A, A ); k >>= 1; } return res; } };
voidsolve( ) { cin >> n >> k;
Mat c; for( int i = 1; i <= n; ++ i ) { for( int j = 1; j <= n; ++ j ) { cin >> c.mat[i][j]; } }
// 刚开始是 1 步,还需要再走 k - 1 步。 Mat ans = c.pow( c, k - 1 );
for( int i = 1; i <= n; ++ i ) { cout << ans.mat[i][i] << '\n'; } }