#include<map> #include<cmath> #include<ctime> #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long lld; lld power(lld x,lld k,lld p){ if(k==0)return 1; lld ans=power(x,k/2,p)%p; ans*=ans;ans%=p; if(k&1)ans*=x; return ans%p; } lld power2(lld x,lld k,lld p){ lld res=1; for (;k;k>>=1,x=(x*x)%p) if (k&1==1) res=(res*x)%p; return res; } lld n; lld Phi(lld n){ lld ans=n,i; for(i=2;i*i<=n;i++) if(n%i==0){ ans=ans/i*(i-1); while(n%i==0)n/=i; } if(n>1)ans=ans/n*(n-1); return ans; } lld phi[1000001]; void get_phi(){ memset(phi,0,sizeof(phi)); phi[1]=1; for(lld i=2;i<=n;i++){ if(!phi[i]) for(lld j=i;j<=n;j+=i){ if(!phi[j])phi[j]=j; phi[j]=phi[j]/i*(i-1); } } } lld gcd(lld a,lld b){ while(b){ lld t=a%b; a=b; b=t; } } lld exgcd(lld a,lld b,lld &x,lld &y){ if(!b){ x=1; y=0; return a; }else{ lld g=exgcd(b,a%b,x,y); lld t=x; x=y; y=t-a/b*y; return g; } } lld bsgs(lld a,lld b,lld p){ lld e=1,m=(lld)sqrt(p+0.5); lld v=power(power(a,m,p),p-2,p); map<lld,lld>hash; hash[1]=0; for(lld i=1;i<m;i++){ e=(e*a)%p; if(!hash.count(e))hash[e]=i; } for(lld i=0;i<m;i++){ if(hash.count(b))return i*m+hash[b]; b=(b*v)%p; } return -1; } lld china(lld n,lld *a,lld *m){ lld M=1,y,x=0,d; for(lld i=1;i<=n;i++)M*=m[i]; for(lld i=1;i<=n;i++){ lld w=M/m[i]; exgcd(m[i],w,d,y); x=(x+y*w*a[i])%M; } return (x+M)%M; } int main(){ return 0; }