#pragma once
#include"./mod-pow.hpp"longlongModSqrt(longlonga,longlongp){if(a>=p)a%=p;if(p==2)returna&1;if(a==0)return0;if(ModPow(a,(p-1)/2,p)!=1)return-1;if(p%4==3)returnModPow(a,(3*p-1)/4,p);unsignedintz=2,q=p-1;while(ModPow(z,(p-1)/2,p)==1)z++;ints=0;while(!(q&1)){s++;q>>=1;}intm=s;unsignedintc=ModPow(z,q,p);unsignedintt=ModPow(a,q,p);unsignedintr=ModPow(a,(q+1)/2,p);while(true){if(t==1)returnr;unsignedintpow=t;intj=1;for(;j<m;j++){pow=1ll*pow*pow%p;if(pow==1)break;}unsignedintb=c;for(inti=0;i<m-j-1;i++)b=1ll*b*b%p;m=j;c=1ll*b*b%p;t=1ll*t*c%p;r=1ll*r*b%p;}}