矩阵快速幂模板
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
typedef long long ll;
ll n,m;
struct node{
ll a[105][105];
}s,ans;
void init(node &ans)
{
memset(ans.a,0,sizeof(ans.a));
for(int i=1;i<=n;i++)
ans.a[i][i]=1;
}
node mul(node x,node y)
{
node ans;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
ans.a[i][j]=0;
for(int k=1;k<=n;k++)
ans.a[i][j]+=(x.a[i][k]*y.a[k][j])%mod;
ans.a[i][j]%=mod;
}
return ans;
}
node matpow(node s,ll m)
{
node ans;
init(ans);
while(m)
{
if(m&1)
ans=mul(ans,s);
m>>=1;
s=mul(s,s);
}
return ans;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>s.a[i][j];
s=matpow(s,m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
printf("%lld",s.a[i][j]);
j==n?printf("\n"):printf(" ");
}
}
}