#pragma GCC optimize("Ofast") #pragma GCC target("avx2") #define rd(v) long v=0;{int _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;} #define wt(v) {long _z=v;do*--wp=_z%10+48;while(_z/=10);} #define SIEVE_N 1000001 char sieve[SIEVE_N]; void mksieve(){ for(long i=2;i=c?maxc:c; j*=p; } while(maxc--) res=res*p%MD; }else{ long j=1; while(j*=p,j