1 #include <cstdio>
2 #include <cstring>
3 #include <cmath>
4 #include <cstdlib>
5 #include <algorithm>
6 #include <string>
7 #include <iostream>
8 #include <stack>
9 #include <map>
10 #include <queue>
11 using namespace std;
12 #define N 15
13 #define INF 0x3f3f3f3f
14 #define MOD 9973
15 int n;
16
17 struct Mat
18 {
19 int mat[N][N];
20 void init()
21 {
22 memset(mat, 0, sizeof(mat));
23 }
24 void E()
25 {
26 memset(mat, 0, sizeof(mat)); //构造单位矩阵
27 for(int i = 0; i < n; i++)
28 mat[i][i] = 1;
29 }
30 };
31
32 Mat operator * (Mat a, Mat b) //矩阵乘法
33 {
34 Mat c;
35 c.init();
36 for(int i = 0; i < n; i++) { //第一个矩阵的行数
37 for(int j = 0; j < n; j++) { //第二个矩阵的列数
38 for(int k = 0; k < n; k++) { //第一个矩阵的列数
39 c.mat[i][j] = c.mat[i][j] + a.mat[i][k] * b.mat[k][j] % MOD;
40 c.mat[i][j] %= MOD; //要加上这句话
41 }
42 }
43 }
44 return c;
45 }
46
47 Mat operator ^ (Mat a, int k) //矩阵快速幂
48 {
49 Mat p, tmp = a;
50 p.E();
51 while(k) {
52 if(k & 1) p = p * tmp;
53 tmp = tmp * tmp;
54 k >>= 1;
55 }
56 return p;
57 }
58
59 int main()
60 {
61 int t;
62 scanf("%d", &t);
63 while(t--) {
64 Mat a;
65 int k;
66 scanf("%d%d", &n, &k);
67 for(int i = 0; i < n; i++)
68 for(int j = 0; j < n; j++)
69 scanf("%d", &a.mat[i][j]);
70 Mat ans = a ^ k;
71 int sum = 0;
72 for(int i = 0; i < n; i++) {
73 sum = sum + ans.mat[i][i] % MOD;
74 }
75 printf("%d\n", sum % MOD);
76 }
77 return 0;
78 }