inlineintsmul(int a, int b){ return (1ll * a * b < M ? a * b : 1ll * a * b % M); } inlineintsadd(int a, int b){ return (a + b >= M ? a + b - M : a + b); }
intfpow(int base, int power = M - 2){ int res = 1; for (; power; power >>= 1) { if (power & 1) res = smul(res, base); base = smul(base, base); } return res; }
intanswer(int a, int b, int win, int lose){ if (a == 0 || b == 0) return a != 0; if (a >= b) { int k = a / b, r = a % b; int c = fpow(lose, k);
int numerator = sadd(1, M - fpow(lose, k)); // 1 - lose^k (mod M) int denominator = sadd(1, M - lose); // 1 - lose (mod M) int tmp = smul(win, smul(numerator, fpow(denominator))); // Using modular inverse
returnsadd(smul(c, answer(r, b, win, lose)), tmp); } else { int k = b / a, r = b % a; int c = fpow(win, k); returnsmul(c, answer(a, r, win, lose)); } }
voidrun(){ int a, b; int p1, p2, P; std::cin >> a >> b >> p1 >> p2 >> P; P = p1 + p2; p1 = smul(p1, fpow(P)), p2 = smul(p2, fpow(P));
std::cout << answer(a, b, p1, p2) << '\n'; }
intmain(){ std::cin.tie(0)->sync_with_stdio(0); int T; std::cin >> T; while (T--) run(); }