#include <bits/stdc++.h>
using namespace std;
#define int long long
const int Mod=998244353;
int olddp[2005], newdp[2005], ans[2005], mul[2005];
void add(int& x,int y)
{
x += y;
if(x>=Mod)
x -= Mod;
}
int a[5005], b[5005], w[5005], k;
int qsm(int x,int y)
{
if(!y)
return 1;
int t=qsm(x,y/2);
if(y%2==0)
return t*t%Mod;
return t*t%Mod*x%Mod;
}
void NTT(int a[])
{
int rev=0;
for(int i=0;i<k;i++)
{
if(i<rev)
swap(a[i],a[rev]);
for(int j=k>>1;(rev^=j)<j;j>>=1);
}
for(int n=2;n<=k;n<<=1)
{
int m=n>>1,sz=k/n;
for(int i=0;i<k;i+=n)
for(int p=0;p<m;p++)
{
long long L=a[i+p], R=a[i+m+p]*w[sz*p]%Mod;
a[i+p]=L+R>=Mod?L+R-Mod:L+R;
a[i+p+m]=L-R<0?L-R+Mod:L-R;
}
}
}
void Mul(int n,int A[],int B[])
{
k=1;
while(k<=n*2+2)
k *= 2;
for(int i=0;i<k;i++)
a[i]=A[i], b[i]=B[i];
w[0]=1;
int P=qsm(3,(Mod-1)/k);
for(int i=1;i<k;i++)
w[i]=w[i-1]*P%Mod;
NTT(a), NTT(b);
for(int i=0;i<k;i++)
a[i]=a[i]*b[i]%Mod;
NTT(a);
long long inv=qsm(k,Mod-2);
for(int i=0;i<k;i++)
b[i]=a[(k-i)%k]*inv%Mod;
for(int i=0;i<n;i++)
A[i]=0;
for(int i=0;i<k;i++)
(A[i%n] += b[i]) %= Mod;
}
int Mul(int x,int y)
{
int ans=1;
for(int i=1;i<=y;i++)
ans *= x;
return ans;
}
void work()
{
int m,a,b,c,d;
cin >> m >> a >> b >> c >> d;
memset(ans,0,sizeof(ans));
memset(mul,0,sizeof(mul));
memset(newdp,0,sizeof(newdp));
newdp[0]=1;
for(int i=0;i<m;i++)
{
memcpy(olddp,newdp,sizeof(newdp));
memset(newdp,0,sizeof(newdp));
for(int j=0;j<m;j++)
{
(newdp[(j+i)%m] += olddp[j]) %= Mod;
(newdp[j] += olddp[j]) %= Mod;
}
}
int L,R;
if(a==0 || b==0)
L=1;
else
L=Mul(m,gcd(a,b))+1;
if(c==0 || d==0)
R=0;
else
R=Mul(m,gcd(c,d));
for(int i=0;i<m;i++)
mul[i]=newdp[i];
ans[0]=1;
int cnt=(R-L+1)/m;
for(int i=0;i<60;i++)
{
if((cnt>>i)&1)
Mul(m,ans,mul);
Mul(m,mul,mul);
}
printf("%lld\n",ans[0]);
}
signed main()
{
int T;
cin >> T;
while(T--)
work();
return 0;
}