对了7,8数据点
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define MOD 1000000007
int n,k;
struct node
{
int m[109][109];
}a,t;
node times(node a,node b)
{
node ans;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
ans.m[i][j]+=(a.m[i][k]*b.m[k][j]);
}
}
}
return ans;
}
node mod(node a)
{
node ans;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
ans.m[i][j]=a.m[i][j]%MOD;
}
}
return ans;
}
node qpow(node a,int n)
{
if(n==0) return t;
else if(n%2==1) return mod(times(qpow(a,n-1),a));
else
{
node temp=mod(qpow(a,n/2));
return mod(times(temp,temp));
}
}
signed main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a.m[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j) t.m[i][j]=1;
else t.m[i][j]=0;
}
}
node ans=qpow(a,k);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<ans.m[i][j]<<" ";
}
cout<<endl;
}
return 0;
}