#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; bool rcmp(int a, int b) { return a>b; } typedef long long LL; #define MOD 998244353 int expit(LL b, int e) { LL r=1; while(e) { if (e&1) { r*=b; r%=MOD; } b*=b; b%=MOD; e>>=1; } return r; } int bb[200004]; int ss[200004]; int ft[200004]; int ift[200004]; #define BB 500 int xx[401][200004]; // (500+200000)*400/2 int main() { int n, i, m, k, nn; int inv2 = expit(2, MOD-2); LL r, t, s; bb[0]=1; ft[0]=ift[0]=1; for (i=1; i<=200000; i++) { bb[i]=(bb[i-1]*2)%MOD; r=ft[i-1]; r*=i; r%=MOD; ft[i]=r; ift[i]=expit(r, MOD-2); } ss[0]=0; for (i=1; i<=200000; i++) ss[i]=(ss[i-1]+bb[i-1])%MOD; for (n=BB; n<200000; n+=BB) { k = n/BB-1; s=0; for (m=0; m<=n; m++) { t=ft[n]; t*=ift[m]; t%=MOD; t*=ift[n-m]; t%=MOD; s+=t; s%=MOD; xx[k][m]=s; } } int tc; scanf("%d", &tc); while(tc) { tc--; scanf("%d %d", &n, &m); // printf("%d:%d\n", n, ss[n]); n--; m--; k = (n+BB-1)/BB-1; nn = (k+1)*BB; r = xx[k][m]; while(nn>n) { nn--; // move nn-> nn-1 t=ft[nn]; t*=ift[m]; t%=MOD; t*=ift[nn-m]; t%=MOD; t+=r; t%=MOD; t*=inv2; t%=MOD; r=t; } // c(n-1, m-1)+...C(n-1, 0) // r=ft[n-1]; r*=ift[m-1]; r%=MOD; r*=ift[n-m]; r%=MOD; r*=ss[n+1]; r%=MOD; printf("%lld\n", r); } return 0; }