long long f(long long x,long long c,long long n)
{
return ((long long)x*x+c)%n;
}
long long PollardRho(long long x)
{
long long s=0,t=0;
long long c=rand()%(x-1)+1;
long long val=1;
int goal;
for(goal=1;;goal<<=1,s=t,val=1)
{
int step;
for(step=1;step<=goal;++step)
{
t=f(t,c,x);
val=val*abs(t-s)%x;
if((step%127)==0)
{
long long d=gcd(val,x);
if(d>1)
{
return d;
}
}
}
long long d=gcd(val,x);
if(d>1)
{
return d;
}
}
}