#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
const ll mod=1000000007;
struct Matrix{
ll n,m,a[110][110];
Matrix():n(0),m(0){}
Matrix(int N,int M,bool f=0):n(N),m(M){
if(!f)memset(a,0,sizeof a);
else for(int i=1;i<=n;++i)a[i][i]=1;
}
const friend Matrix operator*(Matrix& lhs,Matrix& rhs){
Matrix ans(lhs.n,rhs.m);
for(int i=1;i<=lhs.n;++i){
for(int j=1;j<=rhs.m;++j){
for(int k=1;k<=lhs.m;++k)ans.a[i][j]=(ans.a[i][j]+lhs.a[i][k]*rhs.a[k][j])%mod;
}
}
return ans;
}
friend Matrix pow(Matrix& a,ll exp){
Matrix ans(a.n,a.n,1);
while(exp){
if(exp&1)ans=ans*a;
a=a*a;
exp>>=1;
}
return ans;
}
friend istream& operator>>(istream &is,Matrix& m){
for(int i=1;i<=m.n;++i){
for(int j=1;j<=m.m;++j)is >> m.a[i][j];
}
return is;
}
friend ostream& operator<<(ostream &os,const Matrix& m){
for(int i=1;i<=m.n;++i,cout << endl){
for(int j=1;j<=m.m;++j)os << m.a[i][j] << ' ';
}
return os;
}
};
int n,k;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> k;
Matrix a(n,n),ans;
cin >> a;
ans=pow(a,k);
cout << ans;
return 0;
}
矩阵乘法以及输入输出流重载没问题(除非矩阵乘法的数据太水),估计是pow炸了