#include #define int long long using namespace std; int t,m,n,jc[400005],len,ny; int k[200005],ans[200005]; int s[400005],ss[400005]; const int mod=998244353; 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]; bool cmp(node s1,node s2){ if(k[s1.x]==k[s2.x]) return s1.y>n; len=sqrt(200000); s[0]=1,ss[0]=1,jc[0]=1; for(int i=1;i<=400000;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<=200000;i++) k[i]=(i-1)/len+1; for(int i=1;i<=n;i++){ cin>>a[i].x>>a[i].y; a[i].x--,a[i].y--,a[i].id=i; } sort(a+1,a+1+n,cmp); ny=fastp(2,mod-2); 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<