#include using namespace std; #define ll long long const ll mod=998244353; const int maxn=400005; ll fac[maxn+5],inv[maxn+5]; ll qmksm(ll a,ll b){ ll res=1; while(b){ if(b&1) res=res*a%mod; a=a*a%mod; b>>=1; } return res; } ll C(ll n,ll k){ if(k<0 or k>n) return 0; return fac[n]*inv[k]%mod*inv[n-k]%mod; } int main(){ ll t,n,a,ans,i,j,k,zc,zc1,zc2; fac[0]=1; for(i=1;i<=maxn;i++) fac[i]=fac[i-1]*i%mod; inv[maxn]=qmksm(fac[maxn],mod-2); for(i=maxn-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod; scanf("%lld",&t); while(t--){ scanf("%lld%lld",&n,&a); if(n==1){ if(a==0) printf("1\n"); else printf("0\n"); continue; } ans=0; for(k=1;k*k<=a;k++){ if(a%k==0){ zc=k; if((a/zc)%2==(n-1)%2){ zc1=(n-1-(a/zc))/2; if(zc1>=0 and zc1<=n-1) ans=(ans+C(n-1,zc1))%mod; } if(k*k!=a){ zc=a/k; if((a/zc)%2==(n-1)%2){ zc1=(n-1-(a/zc))/2; if(zc1>=0 and zc1<=n-1) ans=(ans+C(n-1,zc1))%mod; } } } } if(a==0){ ans=0; zc1=(n-1)/2; if((n-1)%2==0) ans=C(n-1,zc1); } ans=(ans*2)%mod; if(a==0) ans=ans*qmksm(2,mod-2)%mod; if(a%(n-1)==0) ans=(ans+2)%mod; if(a==0) ans=(ans-1+mod)%mod; printf("%lld\n",ans); } return 0; }