ll@(n,a,b,c); ll fac[2d5+1]{1},fn=0,f=1; rep(i,1,n){ f*=i; if(!fn&&f>=n){ fn=i; } fac[i]=f%=n; } DijkstraHeaph; h.malloc(n,1); h.change(1,0); while(1){ ll x=h.pop(); ll v=h.val[x]; if(x==0){ wt(v); exit(0); } h.change((x+1)%n,v+a); ll bb=b; ll xx=x; while(bb<(n-1)*a){ bb*=b; xx*=x; if(xx>=n){ h.change(0,v+bb+c); } xx%=n; h.change(xx,v+bb); } h.change(fac[x],v+c); if(x>=fn){ h.change(0,v+2c); } }