就过了 #11
悬 1 关
#include<bits/stdc++.h>
using namespace std;
const long long mod=1000000007;
struct Matrix{
long long c[105][105];
Matrix() {memset(c,0,sizeof c);}
}A,I;
long long n,k;
Matrix operator*(const Matrix x,const Matrix y){
Matrix a;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a.c[i][j]=0;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
a.c[i][j]+=x.c[i][k]*y.c[k][j]%mod;
a.c[i][j]%=mod;
}
}
}
return a;
}
void qpow(int b){
while(b>0){
if(b%2==1)I=I*A;
A=A*A;
b>>=1;
}
}
int main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin>>n>>k;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>A.c[i][j];
A.c[i][j]%=mod;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)I.c[i][j]=1;
else I.c[i][j]=0;
}
}
qpow(k);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<I.c[i][j]%mod<<' ';
}
cout<<endl;
}
return 0;
}