#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const long long mod = 998244353;
long long na[1001], nb[1001];
long long QPow(long long a, long long b)
{
if (b == 1) return (a + mod) % mod;
long long ans = 1;
while (b)
{
if (b % 2)
{
ans *= a;
ans = (ans + mod) % mod;
}
a = (a * a + mod) % mod;
b >>= 1;
}
return (ans + mod) % mod;
}
void Solve()
{
int n;
long long a, b, x, y;
cin >> n >> a >> b >> x >> y;
na[1] = a, na[2] = b;
nb[1] = x, nb[2] = y;
int placa = n, placb = n;
for (int i = 3; i <= min(n, 100); i++)
{
na[i] = floor(sqrtl((long double)na[i - 1] * na[i - 2])) + 1;
if (na[i] == na[i - 1])
{
placa = i;
}
}
for (int i = 3; i <= min(n, 100); i++)
{
nb[i] = floor(sqrtl((long double)nb[i - 1] * nb[i - 2])) + 1;
if (nb[i] == nb[i - 1])
{
placb = i;
}
}
long long ans = 1;
int plac = min(placa, placb);
for (int i = 3; i <= min(plac, n) + 1; i++)
{
na[i] = floor(sqrtl((long double)na[i - 1] * na[i - 2])) + 1;
nb[i] = floor(sqrtl((long double)nb[i - 1] * nb[i - 2])) + 1;
}
for (int i = 1; i <= min(plac, n); i++) ans = (ans * (nb[i] - na[i]) + mod) % mod;
if (n > plac)
{
long long base = (nb[plac] - na[plac]) * (nb[plac + 1] - na[plac + 1]);
ans = (ans * QPow(base, (n - plac) / 2) + mod) % mod;
if ((n - plac) % 2) ans = (ans * (nb[plac + 1] - na[plac + 1]) + mod) % mod;
}
cout << ans << endl;
}
int main()
{
int t;
cin >> t;
while (t--)
{
Solve();
}
}
过了样例,但一直WA 0pts