#pragma GCC optimize(2) #include #define int long long using namespace std; int t,m,n,jc[400005],len,ny; int k[200005],ans[200005]; int s[200005],ss[200005],mx; const int mod=998244353; inline int fastp(int x,int y){ if(y==0) return 1; int z=fastp(x,y/2); if(y%2==0) return z*z%mod; else return z*z%mod*x%mod; } struct node{ int x,y,id; } a[200005]; inline bool cmp(node s1,node s2){ if(k[s1.y]==k[s2.y]) return s1.x>n; s[0]=1,ss[0]=1,jc[0]=1; for(int i=1;i<=200000;i++){ jc[i]=fastp(2,i),s[i]=s[i-1]*i%mod; ss[i]=ss[i-1]*fastp(i,mod-2)%mod; } for(int i=1;i<=n;i++){ cin>>a[i].x>>a[i].y; a[i].x--,a[i].y--,a[i].id=i; mx=max(mx,max(a[i].x,a[i].y)); } len=sqrt(mx); ny=fastp(2,mod-2); for(int i=1;i<=mx;i++) k[i]=(i-1)/len+1; sort(a+1,a+1+n,cmp); for(int i=1,x=1,y=0,an=1;i<=n;i++){ while(xa[i].x){ x--; an=(an+c(x,y))%mod*ny%mod; } while(ya[i].y){ an=(an-c(x,y)+mod)%mod; y--; } ans[a[i].id]=an*(jc[a[i].x+1]-1+mod)%mod; } for(int i=1;i<=n;i++) cout<