#include #include using namespace std; using i64 = long long; class range {private: struct I{int x;int operator*(){return x;}bool operator!=(I& lhs){return x> matmul(vector> a, vector> b) { int p = a.size(), q = b[0].size(), r = b.size(); vector> res(p, vector(q)); for(int i=0; i> matpow(vector> a, i64 n) { int p = a.size(); vector> res(p, vector(p)); for(int i=0; i0; x>>=1) { if(x & 1) { res = matmul(res, a); } a = matmul(a, a); } return res; } i64 mod_pow(i64 a, i64 n, i64 mod) { i64 res = 1LL; for(i64 p=a, x=n; x>0; x>>=1) { if(x & 1) { (res *= p) %= mod; } (p *= p) %= mod; } return res; } i64 to_modint(string s, i64 mod) { i64 res = 0; int n = s.size(); for(int i=0; i> c >> d; vector> mat = {{1, 1}, {1, 0}}; i64 x = matpow(mat, c+1)[0][0], y = to_modint(d, mod-1), z = mod_pow(x, y, mod); (res *= z) %= mod; } printf("%d\n", int(res)); return 0; }