#ifndef INCLUDED_MAIN #define INCLUDED_MAIN #include __FILE__ struct stat{ ll h,a,s; }; using namespace nskr; using mint = modint<0>; int main(void){ int t; cin >> t; int i; for(;t--;){ stat g,c; cin >> c.h >> c.a >> c.s >> g.h >> g.a >> g.s; bool s = false; if(c.s < g.s){ s = true; swap(g,c); } if(c.s == g.s){ int l = min((c.h-1) / g.a, (g.h-1) / c.a); c.h -= l*g.a; g.h -= l*c.a; if(c.h > g.a){ int u = (c.h-1) / g.a; mint p = 0, q = 1; q/=10; // rep(i,u){ // p += q*9; // q/=10; // } p = mint(1) - (mint(1)/10).pow(u); p += (mint(1)-p)/2; cout << p.val() << "\n"; }else{ int u = (g.h-1) / c.a; mint p = 0, q=1; q/=10; // rep(i,u){ // p+=q*9; // q/=10; // } p = mint(1) - (mint(1)/10).pow(u); p = (mint(1)-p)/2; cout << p.val() << "\n"; } }else{ int l = min((c.h-1) / g.a, (g.h-1) / c.a); c.h -= l*g.a; g.h -= l*c.a; if(c.h > g.a){ int u =( c.h-1) / g.a; mint p = 0, q = 1; q/=10; // rep(i,u){ // p += q*9; // q/=10; // } p = mint(1) - (mint(1)/10).pow(u); mint r = mint(1)-p; p += r *10 /11; if(s){ cout << (mint(1)-p).val() << "\n"; }else{ cout << p.val() << "\n"; } }else{ int u = (g.h-1) / c.a; mint p = 0, q = 1; q/=10; // rep(i,u){ // p += q*9; // q/=10; // } p = mint(1) - (mint(1)/10).pow(u); mint r = mint(1)-p; p = r *10 /11; if(s){ cout << (mint(1)-p).val() << "\n"; }else{ cout << p.val() << "\n"; } } } } } #else #include using namespace std; using ll = long long; using ld= long double; #define rep(i,n) for(i=0;i<(n);i++) #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() namespace nskr{ template struct modint{ int v; static int& MOD(){ static int mod = 998244353; return mod; } static int get_mod() { return MOD(); } static void set_mod(int m) { MOD() = m; } modint() :v(0){} modint(long long x) : v( (x>=0 ? x%MOD() : (x%MOD() + MOD()))){} long long val() const {return v;} modint& operator+=(const modint& x){if((v+=x.v) >= MOD()) v-=MOD(); return *this; } modint& operator-=(const modint& x){if((v-=x.v) < 0 ) v+=MOD(); return *this; } modint& operator*=(const modint& x){v = (int)(1ll * v * x.v % MOD()); return *this;} modint& operator/=(const modint& x){v = (int)(1ll * v * x.inv().val() % MOD()); return *this;} modint operator-() const {return modint(-v);} modint operator+() const {return *this;} modint operator+(const modint& x) const {return modint(*this)+=x;} modint operator-(const modint& x) const {return modint(*this)-=x;} modint operator*(const modint& x) const {return modint(*this)*=x;} modint operator/(const modint& x) const {return modint(*this)/=x;} bool operator== (const modint& x) const {return v==x.v;} bool operator!= (const modint& x) const {return v!=x.v;} friend ostream &operator<<(ostream &os, const modint &p) { return os << p.v; } friend istream &operator>>(istream &is, modint &a) { int t; is >> t; a = modint(t); return (is); } modint pow(unsigned long long n) const { modint ret(1), mul(v); while(n){ if(n&1) ret *= mul; mul *= mul; n >>=1; } return ret; } modint inv() const{ //参考: https://qiita.com/sesame0224/items/f2ac77c367f588c0d29d int a = v, b = MOD(), u = 1, w = 0; while(b){ int t = a/b; swap(a -= t*b, b); swap(u -= t*w, w); } u%=MOD(); return(u<0?u+MOD():u); } }; } #endif