#include #define pii std::pair #define mkp std::make_pair #define fir first #define sec second typedef long long ll; inline void rd(){} template inline void rd(T &x,U &...args){ int ch=getchar(); T f=1;x=0; while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); x*=f;rd(args...); } const int N=2e5+5,B=500,mod=998244353,INV2=(mod+1)/2; namespace Binom{ std::vector fac,inv; inline int KSM(int x,int n){ int ans=1; while(n){ if(n&1)ans=1ll*ans*x%mod; x=1ll*x*x%mod;n>>=1; }return ans; } inline int C(int n,int m){ if(n==m)return 1; if(n=1;i--)inv[i]=1ll*inv[i+1]*(i+1)%mod; } } using namespace Binom; inline void Add(int &a,int b){(a+=b)>=mod?a-=mod:1;} int T,idv[N],ans[N]; struct node{int n,m,id;}p[N]; signed main(){ rd(T); Init(200005); for(int i=1;i<=T;i++)rd(p[i].n,p[i].m),p[i].id=i; for(int i=1;i<=200000;i++)idv[i]=(i-1)/B+1; std::sort(p+1,p+T+1,[](node a,node b){return idv[a.n]==idv[b.n]?a.mm)Mnsm(); while(nown>n)Mnsn(); ans[p[i].id]=1ll*res*(KSM(2,n+1)-1)%mod; } for(int i=1;i<=T;i++)printf("%d\n",ans[i]); return 0; }