#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<map> #define LL long long #define MAXN 1000010 using namespace std; const int INF=0x3f3f3f3f; //----以下为矩阵快速幂模板-----// const int mod=9973; const int NUM=11;//定义矩阵能表示的最大维数 int N;//N表示矩阵的维数,以下的矩阵加法、乘法、快速幂都是按N维矩阵运算的 struct Mat{//矩阵的类 int a[NUM][NUM]; void init()//将其初始化为单位矩阵 { memset(a,0,sizeof(a)); for(int i=0;i<NUM;i++) { a[i][i]=1; } } }; Mat add(Mat a,Mat b)//(a+b)%mod 矩阵加法 { Mat ans; for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { ans.a[i][j]=a.a[i][j]+b.a[i][j]; ans.a[i][j]%=mod; } } return ans; } Mat mul(Mat a,Mat b) //(a*b)%mod 矩阵乘法 { Mat ans; for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { ans.a[i][j]=0; for(int k=0;k<N;k++) { ans.a[i][j]+=a.a[i][k]*b.a[k][j]; } ans.a[i][j]%=mod; } } return ans; } Mat power(Mat a,int num)//(a^n)%mod 矩阵快速幂 { Mat ans; ans.init(); while(num) { if(num&1) { ans=mul(ans,a); } num>>=1; a=mul(a,a); } return ans; } Mat pow_sum(Mat a,int num)//(a+a^2+a^3....+a^n)%mod 矩阵的幂和 { int m; Mat ans,pre; if(num==1) return a; m=num/2; pre=pow_sum(a,m); ans=add(pre,mul(pre,power(a,m))); if(num&1) ans=add(ans,power(a,num)); return ans; } void output(Mat a)//输出矩阵 { for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { printf("%d%c",a.a[i][j],j==N-1?' ':' '); } } } //----以上为矩阵快速幂模板-----// int main() { int t,n,k,ans,i,j; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); N=n; ans=0; Mat a,temp; for(i=0;i<N;i++) { for(j=0;j<N;j++) { scanf("%d",&a.a[i][j]); } } temp=power(a,k); for(i=0;i<N;i++) { ans=(ans+temp.a[i][i])%mod; } printf("%d ",ans); } return 0; }