#include<string> #include<cstring> #include<algorithm> #include<cmath> #include<cstdio> #include<stack> #include<queue> #define ll long long
usingnamespacestd ;
constint MOD = 1e9+7 ; constint maxn = 105 ; ll n , m ;
struct { ll mat[maxn][maxn] ; }matrix ;
matrix_ operator * (matrix_ a , matrix_ b){ matrix_ ret ; ll temp = 0 ; for ( int i = 0 ; i < n ; i ++ ){ for ( int j = 0 ; j < n ; j ++ ){ temp = 0 ; for ( int k = 0 ; k < n ; k ++ ){ temp += ((a.mat[i][k] % MOD) * (b.mat[k][j] % MOD)) % MOD ; } ret.mat[i][j] = temp % MOD ; } } return ret ; }
voidinit(){ for ( int i = 0 ; i < maxn ; i ++ ){ matrix.mat[i][i] = 1 ; } return ; }
matrix_ quick_pow(matrix_ a , ll n){ matrix_ ret = matrix ; while (n){ if (n & 1){ ret = ret * a ; } a = a * a ; n >>= 1 ; } return ret ; }
intmain(){ while ( cin >> n >> m ){ init() ; matrix_ ans ; for ( int i = 0 ; i < n ; i ++ ){ for ( int j = 0 ; j < n ; j ++ ){ cin >> ans.mat[i][j] ; } } ans = quick_pow(ans , m) ; for ( int i = 0 ; i < n ; i ++ ){ for ( int j = 0 ; j < n ; j ++ ){ j == 0 || cout << " " ; cout << ans.mat[i][j] ; } cout << endl ; } } return0 ; }
近期评论