#include using namespace std; template void read(T &a){ #define gc getchar() char c;a=0;int f=1; while(!isdigit(c=gc))if(c=='-')f=-1; do a=a*10+c-'0'; while(isdigit(c=gc)); a*=f; } template void write(T a){ if(a<0)putchar('-'),a=-a; if(a>=10)write(a/10); putchar('0'+a%10); } char GC(){ char c=getchar(); while(c<=32)c=getchar(); return c; } template void chmin(T &x,T y){if(x>y)x=y;} template void chmax(T &x,T y){if(x PII; typedef pair PLI; typedef __int128 lll; mt19937 rng(chrono::system_clock::now().time_since_epoch().count()); namespace GENSOKYO{ ll n,m,a,b; #define ll lll array f(ll n,ll m,ll a,ll b){ assert(a>=0&&b>=0); ll a1=a/m,b1=b/m; a%=m,b%=m; ll k=(a*(n-1)+b)/m; array res{0,0,0}; if(k){ array tmp=f(k,a,m,m-b+a-1); res[0]+=k*n-tmp[0]; res[1]+=k*k*n-2*tmp[2]-tmp[0]; res[2]+=k*n*(n-1)/2+tmp[0]/2-tmp[1]/2; res[1]+=2*a1*res[2]; res[1]+=2*b1*res[0]; } res[0]+=n*(n-1)/2*a1+n*b1; res[1]+=a1*a1*(n-1)*n*(2*n-1)/6 +2*a1*b1*n*(n-1)/2 +b1*b1*n; res[2]+=a1*(n-1)*n*(2*n-1)/6 +b1*n*(n-1)/2; return res; } #undef ll void main(){ cin>>n>>m>>a>>b; array res=f(n,m,a,b); array res2=f(n,m,a,0); cout<<(long long)(2*res[2]-(n-1)*res[0]-n*res2[0]+res2[2])<>T; while(T--)GENSOKYO::main(); // cout<