ll add_mod(ll a,ll b,ll mod){
ll ans=0;
while(b){
if(b&1)
ans=(ans+a)%mod;
a=a*2%mod;
b>>=1;
}
return ans;
}
ll pow_mod(ll a,ll n,ll mod){
if(n>1){
ll tmp=pow_mod(a,n>>1,mod)%mod;
tmp=add_mod(tmp,tmp,mod);
if(n&1) tmp=add_mod(tmp,a,mod);
return tmp;
}
return a;
}
bool Miller_Rabbin(ll n,ll a){
ll d=n-1,s=0,i;
while(!(d&1)){
d>>=1;
s++;
}
ll t=pow_mod(a,d,n);
if(t==1 || t==-1)
return 1;
for(i=0;i<s;i++){
if(t==n-1)
return 1;
t=add_mod(t,t,n);
}
return 0;
}
bool is_prime(ll n){
ll i,tab[4]={3,4,7,11};
for(i=0;i<4;i++){
if(n==tab[i])
return 1;
if(!n%tab[i])
return 0;
if(n>tab[i] && !Miller_Rabbin(n,tab[i]))
return 0;
}
return 1;
}