| 12
 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
 
 | struct Matrix{int n, m;
 vector<vector<int>>a;
 Matrix(int n, int m) : n(n), m(m), a(n, vector<int>(m)) {}
 
 
 Matrix operator* (const Matrix &o){
 Matrix c(n, o.m);
 for(int i = 0; i < n; i++){
 for(int j = 0; j < o.m; j++){
 for(int k = 0; k < m; k++){
 c.a[i][j] += a[i][k] * o.a[k][j];
 c.a[i][j] %= mod;
 }
 }
 }
 return c;
 }
 };
 
 Matrix Mqmi(Matrix M, int k){
 Matrix res(M.n, M.n);
 for(int i = 0; i < M.n; i++) res.a[i][i] = 1;
 while(k){
 if(k & 1) res = res * M;
 M = M * M;
 k >>= 1;
 }
 return res;
 }
 
 |