#include using namespace std; struct matrix{ using T=long long; int h,w; vector> val; matrix(int r,int c=-1):h(r),w(c){ if (w==-1) w=h; val.assign(h,vector(w,0)); } matrix operator*(matrix b){ matrix a=*this,c(h,w); for (int i=0;i0){ if (k%2==1) ret=ret*m; m=m*m; k/=2; } return ret; } }; int main(){ int n=2; matrix m1(n),m2(n); for (int i=0;i>m1.val[i][j]; for (int i=0;i>m2.val[i][j]; matrix ans=m1*m2*m1*m2; for (int i=0;i