void exgcd (LL a, LL b, LL &x, LL &y){if(b ==0){
x =1; y =0;return;}
exgcd (b, a % b, y, x);
y -= a / b * x;}
LL inv (LL a, LL p){
LL x, y;
exgcd (a, p, x, y);// printf ("a = %d, p = %d, x = %d, y = %d\n", a, p, x, y);
LL tox = lcm (a, p)/ a, toy = lcm (a, p)/ p;
LL need = x / tox;
x += need * tox; y -= need * toy;if(x <0) x += tox, y -= toy;// printf ("a = %d, p = %d, x = %d, y = %d, tox = %d, toy = %d\n\n", a, p, x, y, tox, toy);return x;}
LL gcd (LL x, LL y){if(y ==0)return x;elsereturn gcd (y, x % y);}
LL lcm (LL x, LL y){return x / gcd (x, y)* y;}
2.
LL quick_pow (LL a, LL b, LL p){
LL ans =1;while(b){if(b &1) ans =(ans * a)% p;
a =(a * a)% p;
b >>=1;}return ans;}
LL inv (LL a, LL p){// printf ("a = %d, p = %d\n", a, p);return quick_pow (a, p -2, p);}