Matrix PowM(Matrix m,int N) { if (N==1) return m; Matrix t; t.Clean(); t=PowM(m,N>>1); t.Minus(t); if (N&1) t.Minus(m); return t; }
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]); }