#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
using namespace std;
const long long mod=1000000007;
struct az {
long long o[110][110];
};
az a,b,ans;
long long n,k;
az suan(az a,az b) {
az ans;
memset(ans.o,0,sizeof(ans.o));
long long int i,j,p;
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++) {
for(p=1; p<=n; p++) {
ans.o[i][j]=ans.o[i][j]%mod+(a.o[i][p]*b.o[p][j])%mod;
// ans.o[i][j]%=mod;
}
}
}
return ans;
}
void po() {
b=a;k--;
while(k&1) {
if(k&1)
a=suan(a,b);
b=suan(b,b);
k>>=1;
}
}
int main() {
long long i,j;
cin>>n>>k;
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++) {
cin>>a.o[i][j];
}
}
po();
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++) {
cout<<a.o[i][j]%mod<<" ";
}
cout<<endl;
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
using namespace std;
const long long mod=1000000007;
struct az {
long long o[110][110];
};
az a,b,ans;
long long n,k;
az suan(az a,az b) {
az ans;
memset(ans.o,0,sizeof(ans.o));
long long int i,j,p;
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++) {
for(p=1; p<=n; p++) {
ans.o[i][j]=ans.o[i][j]%mod+(a.o[i][p]*b.o[p][j])%mod;
// ans.o[i][j]%=mod;
}
}
}
return ans;
}
void po() {
b=a;k--;
while(k&1) {
if(k&1)
a=suan(a,b);
b=suan(b,b);
k>>=1;
}
}
int main() {
long long i,j;
cin>>n>>k;
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++) {
cin>>a.o[i][j];
}
}
po();
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++) {
cout<<a.o[i][j]%mod<<" ";
}
cout<<endl;
}
return 0;
}
别骂了别骂了,已经重改过了QWQ