#include #include using namespace std; using i32 = int; using u32 = unsigned int; using i64 = long long; using u64 = unsigned long long; #define FAST_IO \ ios::sync_with_stdio(false); \ cin.tie(0); const i64 INF = 1001001001001001001; using Modint = atcoder::static_modint<998244353>; int main() { FAST_IO int T; cin >> T; while (T--) { i64 Hc, Ac, Sc, Hg, Ag, Sg; cin >> Hc >> Ac >> Sc >> Hg >> Ag >> Sg; int s = Sc == Sg ? 0 : Sc > Sg ? 1 : -1; Hc --; Hg --; auto z = min(Hc / Ag, Hg / Ac); Hc -= Ag * z; Hg -= Ac * z; auto xc = Hc / Ag; auto xg = Hg / Ac; // s=1: cyanが先に攻撃 s=-1 greenが先に攻撃 s=0 1/2の確率で攻撃 // xc: cyan の残り食らってもいい回数 // xg: green の残り食らってもいい回数 bool rev = false; if (xc < xg) { rev = true; swap(xc, xg); s = -s; } // xg = 0 auto x = xc; // cyanが残りx回までは食らっていい // 攻撃ターンがsのとき、cyanが勝つ確率 Modint ans = 0; Modint p = Modint(1) / 10; auto px = p.pow(x); //x回までの間に cyanがかつ ans += 1 - px; //x回経過後、cyanが勝つ if (s == 1) { ans += px * 10 / 11; } else if (s == -1) { ans += px * 1 / 11; } else { // (1/2 * 9/10 + 1/2 * 1/10 * 9/10) * 100/99 // 1/2 *(99/100) * 100/99 ans += px * 1 / 2; } cout << ans.val() << endl; } }