template<class T> T fast_mod(T a,T b,T Mod){
if(b==0) return 1;
T ans=1,base=a;
while(b!=0){
if(b&1)ans=(ans*base)%Mod;
base=(base*base)%Mod;
b>>=1;
}
return ans;
}
//求 x^2 = a mod(n)的最小整数解x ,n,为素数
//返回-1表示无解
int modsqr(int a,int n){
int b,k,i,x;
if(n==2) return a%n;
if(fast_mod(a,(n-1)/2,n)==1){
if(n%4==3) x=fast_mod(a,(n+1)/4,n);
}else {
for(b=1;fast_mod(b,(n-1)/2,n)==1;b++);
i=(n-1)/2;
k=0;
do{
i/=2;
k/=2;
if((fast_mod(a,i,n)*(long long )fast_mod(b,k,n)+1)%n==0)
k+=(n-1)/2;
}while(i%2==0);
x=(fast_mod(a,(i+1)/2,n))*(long long)fast_mod(b,k/2,n)%n;
if(x*2>n) x=n-x;
return x;
}
return -1;
}