1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
   | #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 10 + 5; const ll mod = 9973;
  struct Matrix {     int n, m;     ll a[maxn][maxn];     Matrix(int n = 0, int m = 0) : n(n), m(m) {}     void input() {         for(int i = 1; i <= n; ++i) {             for(int j = 1; j <= n; ++j) {                 scanf("%lld", &a[i][j]);             }         }     }     void output() {         for(int i = 1; i <= n; ++i) {             for(int j = 1; j <= n; ++j) {                 printf("%lld", a[i][j]);                 printf("%s", j == n? "\n": " ");             }         }     }     void init() {         memset(a, 0, sizeof(a));     }     void unit() {         if(n == m) {             init();             for(int i = 1; i <= n; ++i) {                 a[i][i] = 1;             }         }     }     Matrix operator *(const Matrix b) {         Matrix c(n, b.m);         c.init();         for(int i = 1; i <= c.n; ++i) {             for(int k = 1; k <= m; ++k) {                 for(int j = 1; j <= c.m; ++j) {                     c.a[i][j] = (c.a[i][j] + a[i][k] * b.a[k][j]) % mod;                 }             }         }         return c;     }     Matrix qmod(ll b) {         if(n == m) {             Matrix a = *this;             Matrix ans = Matrix(n, n);             ans.unit();             if(!b) return ans;             while(b) {                 if(b & 1) ans = ans * a;                 a = a * a;                 b >>= 1;             }             return ans;         }     } };
  int main() {     int T;     scanf("%d", &T);     while(T--) {         int n;         ll k;         scanf("%d%lld", &n, &k);         Matrix m(n, n);         m.input();         m = m.qmod(k);         ll ans = 0;         for(int i = 1; i <= n; ++i) {             ans = (ans + m.a[i][i]) % mod;         }         printf("%lld\n", ans);     }     return 0; }
   |