//矩阵快速幂 //满足c[x][y]=∑(i=1,i<=n)a[x][i]*b[i][y],其中c=a*b #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #define ll long long #define MOD 1000000007 using namespace std; ll n,k; struct uio{ ll squ[101][101],n,m; }mat; uio multiply(uio x,uio y) { uio z;//暂存结果 if(x.m!=y.n) return z; z.n=x.n,z.m=y.m; for(ll i=1;i<=z.n;i++) for(ll j=1;j<=z.m;j++) { z.squ[i][j]=0; for(ll l=1;l<=x.m;l++) z.squ[i][j]=(z.squ[i][j]+x.squ[i][l]*y.squ[l][j])%MOD; } return z; } uio fast_exponentiation(uio x,ll k)//与普通快速幂结构相同 { uio ans=x,y=x; k--;//ans=x表示已经乘过一次了 因此次数减一 while(k>0) { if(k%2==1) ans=multiply(y,ans); y=multiply(y,y); k/=2; } return ans; } int main() { scanf("%lld%lld",&n,&k); for(ll i=1;i<=n;i++) for(ll j=1;j<=n;j++) scanf("%lld",&mat.squ[i][j]); mat.m=mat.n=n; mat=fast_exponentiation(mat,k); for(ll i=1;i<=n;i++) { for(ll j=1;j<=n;j++) printf("%lld ",mat.squ[i][j]); printf(" "); } return 0; }