func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T1, typename T2>   bool Max(T1& a, T2 b) {     return a < b ? a = b, 1 : 0;   }   template <typename T1, typename T2>   bool Min(T1& a, T2 b) {     return a > b ? a = b, 1 : 0;   }   const int N = 1000001;   bool prime[N];   vector<long long> pri;   vector<pair<long long, long long> > nv, sv;   long long n, m, s;   long long ans;   void rec(long long i, long long prod) {     if (i == sv.size()) {       ans++;       return;     }     auto cur = sv[i];     for (int j = 0; j < (cur.second + 1); ++j) {       rec(i + 1, prod);       if ((prod *= cur.first) > n) break;     }   }   long long pow(long long a, long long p) {     long long ret = 1;     while (p) {       if (p & 1) ret *= a;       a *= a;       p >>= 1;     }     return ret;   }   void solve() {     long long v;     n = 1;     for (int i = 0; i < (3); ++i) {       cin >> v;       n *= v;     }     m = 1;     for (int i = 0; i < (3); ++i) {       cin >> v;       m *= v;     }     s = 2;     for (int i = 0; i < (3); ++i) {       cin >> v;       s *= v;     }     long long ts = s, tn = n;     nv.clear();     sv.clear();     for (auto& e : pri) {       if (e * e > ts) break;       long long cnt = 0;       while (ts % e == 0) {         cnt++;         ts /= e;       }       if (cnt) sv.emplace_back(e, cnt);     }     if (ts > 1) sv.emplace_back(ts, 1);     for (auto& e : pri) {       if (e * e > tn) break;       long long cnt = 0;       while (tn % e == 0) {         cnt++;         tn /= e;       }       if (cnt) nv.emplace_back(e, cnt);     }     if (tn > 1) nv.emplace_back(tn, 1);     ans = 0;     rec(0, 1);     sv.emplace_back(N, 1);     vector<long long> tmp;     long long i = 0;     for (auto& e : nv) {       while (sv[i].first < e.first) i++;       if (sv[i].first > e.first) {         tmp.emplace_back(e.first);       } else {         if (sv[i].second < e.second)           tmp.emplace_back(pow(e.first, sv[i].second + 1));         i++;       }     }     long long sz = tmp.size();     for (int sub = 0; sub < (1 << sz); ++sub) {       long long t = 1;       bool add = 1;       for (int i = 0; i < (sz); ++i)         if ((sub >> i) & 1) {           t *= tmp[i];           add ^= 1;         }       if (add)         ans += m / t;       else         ans -= m / t;     }     cout << ans <<   n ;   }   void init() {     for (int i = 2; i <= (N - 1); ++i)       if (!prime[i]) {         pri.emplace_back(i);         for (long long j = (long long)i * i; j < N; j += i) prime[j] = 1;       }   }   int main(void) {     ios::sync_with_stdio(false);     cin.tie(0);     cout.setf(ios::fixed);     cout.precision(20);     init();     int TC = 1;     cin >> TC;     for (int TI = 1; TI <= (TC); ++TI) {       solve();     }     return 0;   }   