#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
using ll = long long;
const ll MOD = 998244353;
ll exgcd(ll a, ll b, ll &x, ll &y) {
if (b == 0) { x = 1; y = 0; return a; }
ll x1, y1;
ll d = exgcd(b, a % b, x1, y1);
x = y1;
y = x1 - y1 * (a / b);
return d;
}
ll count_valid(ll N, ll A, ll B, ll C, ll D, ll d) {
ll targetA = (d - B % d) % d;
ll x, y;
ll gA = exgcd(A, d, x, y);
if (targetA % gA != 0) return 0;
ll stepA = d / gA;
x = (x % stepA + stepA) % stepA;
ll mul = targetA / gA;
ll X = (x * (mul % stepA)) % stepA;
X = (X + stepA) % stepA;
ll targetC = (d - D % d) % d;
ll At = (C * stepA) % d;
ll Bt = (targetC - (C * X) % d) % d;
Bt = (Bt + d) % d;
ll tx, ty;
ll gt = exgcd(At, d, tx, ty);
if (Bt % gt != 0) return 0;
ll stepT = d / gt;
tx = (tx % stepT + stepT) % stepT;
ll mulT = Bt / gt;
ll T = (tx * (mulT % stepT)) % stepT;
T = (T + stepT) % stepT;
ll M = stepT * stepA;
ll startX = (X + T * stepA) % M;
if (startX == 0) startX = M;
if (startX > N) return 0;
return (N - startX) / M + 1;
}
void solve() {
ll N, A, B, C, D;
cin >> N >> A >> B >> C >> D;
ll delta = abs(A * D - B * C);
if (delta == 0) {
ll g1 = __gcd(A, C);
ll a = A / g1;
ll k = B / a;
ll sum_i = (N % MOD) * ((N + 1) % MOD) % MOD;
sum_i = sum_i * 499122177 % MOD;
ll ans = (g1 % MOD) * sum_i % MOD;
ans = (ans + (k % MOD) * (N % MOD)) % MOD;
cout << ans << "\n";
return;
}
vector<ll> divs;
for (ll i = 1; i * i <= delta; ++i) {
if (delta % i == 0) {
divs.push_back(i);
if (i * i != delta) {
divs.push_back(delta / i);
}
}
}
sort(divs.begin(), divs.end());
int m = divs.size();
vector<ll> exact(m, 0);
for (int i = 0; i < m; ++i) {
exact[i] = count_valid(N, A, B, C, D, divs[i]);
}
for (int i = m - 1; i >= 0; --i) {
for (int j = i + 1; j < m; ++j) {
if (divs[j] % divs[i] == 0) {
exact[i] -= exact[j];
}
}
}
ll ans = 0;
for (int i = 0; i < m; ++i) {
ans = (ans + (exact[i] % MOD) * (divs[i] % MOD)) % MOD;
}
cout << ans << "\n";
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int T;
if (cin >> T) {
while (T--) solve();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKY29uc3QgbGwgTU9EID0gOTk4MjQ0MzUzOwoKbGwgZXhnY2QobGwgYSwgbGwgYiwgbGwgJngsIGxsICZ5KSB7CiAgICBpZiAoYiA9PSAwKSB7IHggPSAxOyB5ID0gMDsgcmV0dXJuIGE7IH0KICAgIGxsIHgxLCB5MTsKICAgIGxsIGQgPSBleGdjZChiLCBhICUgYiwgeDEsIHkxKTsKICAgIHggPSB5MTsKICAgIHkgPSB4MSAtIHkxICogKGEgLyBiKTsKICAgIHJldHVybiBkOwp9CgpsbCBjb3VudF92YWxpZChsbCBOLCBsbCBBLCBsbCBCLCBsbCBDLCBsbCBELCBsbCBkKSB7CiAgICBsbCB0YXJnZXRBID0gKGQgLSBCICUgZCkgJSBkOwogICAgbGwgeCwgeTsKICAgIGxsIGdBID0gZXhnY2QoQSwgZCwgeCwgeSk7CiAgICBpZiAodGFyZ2V0QSAlIGdBICE9IDApIHJldHVybiAwOwogICAgCiAgICBsbCBzdGVwQSA9IGQgLyBnQTsKICAgIHggPSAoeCAlIHN0ZXBBICsgc3RlcEEpICUgc3RlcEE7CiAgICBsbCBtdWwgPSB0YXJnZXRBIC8gZ0E7CiAgICBsbCBYID0gKHggKiAobXVsICUgc3RlcEEpKSAlIHN0ZXBBOwogICAgWCA9IChYICsgc3RlcEEpICUgc3RlcEE7CiAgICAKICAgIGxsIHRhcmdldEMgPSAoZCAtIEQgJSBkKSAlIGQ7CiAgICBsbCBBdCA9IChDICogc3RlcEEpICUgZDsKICAgIGxsIEJ0ID0gKHRhcmdldEMgLSAoQyAqIFgpICUgZCkgJSBkOwogICAgQnQgPSAoQnQgKyBkKSAlIGQ7CiAgICAKICAgIGxsIHR4LCB0eTsKICAgIGxsIGd0ID0gZXhnY2QoQXQsIGQsIHR4LCB0eSk7CiAgICBpZiAoQnQgJSBndCAhPSAwKSByZXR1cm4gMDsKICAgIAogICAgbGwgc3RlcFQgPSBkIC8gZ3Q7CiAgICB0eCA9ICh0eCAlIHN0ZXBUICsgc3RlcFQpICUgc3RlcFQ7CiAgICBsbCBtdWxUID0gQnQgLyBndDsKICAgIGxsIFQgPSAodHggKiAobXVsVCAlIHN0ZXBUKSkgJSBzdGVwVDsKICAgIFQgPSAoVCArIHN0ZXBUKSAlIHN0ZXBUOwogICAgCiAgICBsbCBNID0gc3RlcFQgKiBzdGVwQTsKICAgIGxsIHN0YXJ0WCA9IChYICsgVCAqIHN0ZXBBKSAlIE07CiAgICBpZiAoc3RhcnRYID09IDApIHN0YXJ0WCA9IE07CiAgICAKICAgIGlmIChzdGFydFggPiBOKSByZXR1cm4gMDsKICAgIHJldHVybiAoTiAtIHN0YXJ0WCkgLyBNICsgMTsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGxsIE4sIEEsIEIsIEMsIEQ7CiAgICBjaW4gPj4gTiA+PiBBID4+IEIgPj4gQyA+PiBEOwogICAgCiAgICBsbCBkZWx0YSA9IGFicyhBICogRCAtIEIgKiBDKTsKICAgIGlmIChkZWx0YSA9PSAwKSB7CiAgICAgICAgbGwgZzEgPSBfX2djZChBLCBDKTsKICAgICAgICBsbCBhID0gQSAvIGcxOwogICAgICAgIGxsIGsgPSBCIC8gYTsKICAgICAgICAKICAgICAgICBsbCBzdW1faSA9IChOICUgTU9EKSAqICgoTiArIDEpICUgTU9EKSAlIE1PRDsKICAgICAgICBzdW1faSA9IHN1bV9pICogNDk5MTIyMTc3ICUgTU9EOwogICAgICAgIGxsIGFucyA9IChnMSAlIE1PRCkgKiBzdW1faSAlIE1PRDsKICAgICAgICBhbnMgPSAoYW5zICsgKGsgJSBNT0QpICogKE4gJSBNT0QpKSAlIE1PRDsKICAgICAgICBjb3V0IDw8IGFucyA8PCAiXG4iOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgdmVjdG9yPGxsPiBkaXZzOwogICAgZm9yIChsbCBpID0gMTsgaSAqIGkgPD0gZGVsdGE7ICsraSkgewogICAgICAgIGlmIChkZWx0YSAlIGkgPT0gMCkgewogICAgICAgICAgICBkaXZzLnB1c2hfYmFjayhpKTsKICAgICAgICAgICAgaWYgKGkgKiBpICE9IGRlbHRhKSB7CiAgICAgICAgICAgICAgICBkaXZzLnB1c2hfYmFjayhkZWx0YSAvIGkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgc29ydChkaXZzLmJlZ2luKCksIGRpdnMuZW5kKCkpOwogICAgCiAgICBpbnQgbSA9IGRpdnMuc2l6ZSgpOwogICAgdmVjdG9yPGxsPiBleGFjdChtLCAwKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgKytpKSB7CiAgICAgICAgZXhhY3RbaV0gPSBjb3VudF92YWxpZChOLCBBLCBCLCBDLCBELCBkaXZzW2ldKTsKICAgIH0KICAgIAogICAgZm9yIChpbnQgaSA9IG0gLSAxOyBpID49IDA7IC0taSkgewogICAgICAgIGZvciAoaW50IGogPSBpICsgMTsgaiA8IG07ICsraikgewogICAgICAgICAgICBpZiAoZGl2c1tqXSAlIGRpdnNbaV0gPT0gMCkgewogICAgICAgICAgICAgICAgZXhhY3RbaV0gLT0gZXhhY3Rbal07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIGxsIGFucyA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07ICsraSkgewogICAgICAgIGFucyA9IChhbnMgKyAoZXhhY3RbaV0gJSBNT0QpICogKGRpdnNbaV0gJSBNT0QpKSAlIE1PRDsKICAgIH0KICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgaW50IFQ7CiAgICBpZiAoY2luID4+IFQpIHsKICAgICAgICB3aGlsZSAoVC0tKSBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=