fast power
ll qpow(ll a,ll b,ll m){ ll ans=1; ll k=a; while(b){ if(b&1)ans=ans*k%m; k=k*k%m; b>>=1; } return ans; }
fast multiplier
ll qmul(ll a,ll b,ll m){ ll ans=0; ll k=a; ll f=1;//f is used to store the negative sign if(k<0){f=-1;k=-k;} if(b<0){f*=-1;b=-b;} while(b){ if(b&1) ans=(ans+k)%m; k=(k+k)%m; b>>=1; } return ans*f; }