#pragma GCC optimize("Ofast") #pragma GCC target("avx2") #define RDL(v) long v=0;{int _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;} int w[100001]; main(){ char rbuf[64]; read(0,rbuf,sizeof rbuf); char*rp=rbuf; RDL(a); RDL(b); RDL(c); { long p=c/(c&-c); long e=p; long i=3; while(e>1){ if(e%i==0){ p-=p/i; while(e%i==0){ e/=i; } } i+=2; if(i*i>e){ i=e; } } if(b>=p){ b=b%p+p; } } long z=0,y=0; long ac=a%c; for(long i=1;i<=c;++i){ long x; if((i&1)==0&&i!=2){ x=(long)w[2]*w[i/2]%c; }else if((int)i%3==0&&i!=3){ x=(long)w[3]*w[i/3]%c; }else{ x=1; long e=i; long d=b; while(d){ if(d&1){ x=x*e%c; } d>>=1; e=e*e%c; } } w[i]=x; y+=x; if(i==ac){ z=y; } } z+=a/c*y; z=z%c; { long n=0,d=0; while(++n,d=d<<8|0x30|z%10,z/=10); write(1,&d,n); } _exit(0); }