1 #include2 #include 3 using namespace std; 4 int n,f; 5 struct Matrix{ 6 long long v[105][105]; 7 }A,Ans; 8 Matrix operator *(Matrix A,Matrix B){ 9 Matrix C;10 memset(C.v,0,sizeof(C.v));11 for(int i=1;i<=n;i++){12 for(int j=1;j<=n;j++){13 for(int k=1;k<=n;k++){14 C.v[i][j]+=(A.v[i][k]%1000000007)*(B.v[k][j]%1000000007);15 C.v[i][j]%=1000000007;16 }17 }18 }19 return C;20 }21 Matrix fastpower(Matrix A,long long n){22 Matrix Mid=A;23 while(n){24 if(n%2)25 Mid=A*Mid;26 A=A*A;27 n>>=1;28 }29 return Mid;30 }31 int main(){32 scanf("%d%d",&n,&f);33 for(int i=1;i<=n;i++){34 for(int j=1;j<=n;j++){35 scanf("%lld",&A.v[i][j]);36 }37 }38 Ans=fastpower(A,f-1);39 for(int i=1;i<=n;i++){40 for(int j=1;j<=n;j++){41 printf("%lld ",Ans.v[i][j]);42 }43 printf("\n");44 }45 return 0;46 }