#include using namespace std; const long long mod=998244353; const int p=500; long long fc[200005]={1},inv[200005]={1},fj[200005]={1},ans[200005]; long long c(int a,int b){ return fc[a]*inv[b]%mod*inv[a-b]%mod; }long long a(int a,int b){ return fc[a]*inv[a-b]%mod; }long long qpow(long long a,long long b){ if(b==0)return 1; if(b==1)return a; long long t=qpow(a,b/2); return t*t%mod*qpow(a,b%2)%mod; } int t; struct que{ int n,m,i; }q[200005]; vectorvv[1005]; bool operator<(que a,que b){ return a.n>t; for(int i=1;i<=t;i++){ cin>>q[i].n>>q[i].m;q[i].i=i; vv[q[i].m/p].push_back(q[i]); }for(int pp=0;pp<=500;pp++){ int len=vv[pp].size(); sort(vv[pp].begin(),vv[pp].end()); int a=1,b=1; long long d=1; for(int i=0;ivv[pp][i].m){ d=(d-c(a-1,b-1)+mod)%mod; b--; }while(a(n,m+1) +=C(n-1,m) (n,m)->(n,m-1) -=C(n-1,m-1) (n,m)->(n+1,m) +=(n,m)-C(n-1,m-1) */