#include using namespace std; const int N=2e5+10,mod=998244353,B=320,INV2=(mod+1)/2; int n,m,bin[N],ans[N],ord[N]; int fac[N],inv[N],invp[N]; struct node { int l,r,o; bool operator<(const node &x)const { if (ord[l]==ord[x.l]) return ord[l]&1?rx.r; return l>=1) { if (ind&1) prd=1ll*prd*bas%mod; bas=1ll*bas*bas%mod; } return prd; } int C(int x,int y) { if (y<0||x>y) return 0; return 1ll*fac[y]*invp[x]%mod*invp[y-x]%mod; } int main() { n=2e5; for (int i=1;i<=n;i++) ord[i]=(i-1)/B+1; bin[0]=1; for (int i=1;i<=n;i++) bin[i]=2*bin[i-1]%mod; fac[0]=inv[0]=invp[0]=1; fac[1]=inv[1]=invp[1]=1; for (int i=2;i<=n;i++) fac[i]=1ll*fac[i-1]*i%mod, inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod, invp[i]=1ll*invp[i-1]*inv[i]%mod; cin>>m; for (int i=1;i<=m;i++) scanf("%d%d",&a[i].r,&a[i].l),ans[i]=bin[a[i].r]-1,a[i].o=i,a[i].l--,a[i].r--; sort(a+1,a+m+1); int l,r,res=1; l=0,r=1; for (int i=1;i<=m;i++) { if (!a[i].r) {ans[a[i].o]=0; continue;} while (ra[i].l) (res+=mod-C(l,r))%=mod,l--; while (r>a[i].r) r--,res=1ll*(res+C(l,r))*INV2%mod; while (l