void Main() { if (N<3) { puts("1"); return ; } Matrix m; m.Clean(); m.d[0][0]=A%7; m.d[0][1]=B%7; m.d[1][0]=1; m=PowM(m,N-2); int Ans=m.d[0][0]+m.d[0][1]; Ans%=7; printf("%d\n",Ans); // printf("{ {%d %d}\n {%d %d}}\n",m.d[0][0],m.d[0][1],m.d[1][0],m.d[1][1]); }
int main(int argc, char *argv[]) { setIO("sample"); int64 T =gi; while(T--) { n = gi; k = gi;flag = 0; for(int64 i = 1;i<=n;++i) for(int64 j = 1;j<=n;++j) m.a[i][j] = gi; mat a; PowM(a,k-1); int64 ans = 0; for(int64 i = 1;i<=n;++i) ans += a.a[i][i],ans%=mod; printf(I64D,ans);puts(""); } closeIO(); return EXIT_SUCCESS; }