#include <bits/stdc++.h>
using namespace std;
const int maxn = 1E6 + 77;
int primes[maxn], cntPrimes = 0;
bool isPrime[maxn];
void primeTable() {
  memset(isPrime, -1, sizeof(isPrime));
  isPrime[1] = false;
  for (int i = 2; i < maxn; ++i) {
    if (isPrime[i]) {
      primes[cntPrimes++] = i;
    }
    for (int j = 0; j < cntPrimes; ++j) {
      if (primes[j] * (long long)i >= maxn) break;
      isPrime[primes[j] * i] = false;
      if (!(i % primes[j])) break;
    }
  }
}
int T, n[3], m[3], s[3], nc, np[100], nk[100], mc, mp[100], mk[100], sc,
    sp[100], sk[100], tc, tp[100], tk[100];
long long N, M, S, ans;
void fact(int *v, int &c, int *p, int *k) {
  for (int i = 0; v[0] > 1 || v[1] > 1 || v[2] > 1; ++i) {
    bool flag = false;
    for (int j = 0; j < 3; ++j) {
      while (!(v[j] % primes[i])) {
        flag = true;
        v[j] /= primes[i];
        ++k[c];
      }
    }
    if (flag) {
      p[c++] = i;
    }
  }
}
void dfs_m(int c, long long v, int d) {
  if (c == tc) {
    if (v != 1) {
      long long a = M / v;
      if (d)
        ans -= a;
      else
        ans += a;
    }
    return;
  }
  dfs_m(c + 1, v, d);
  for (int i = 0; i < tk[c]; ++i) v *= primes[tp[c]];
  dfs_m(c + 1, v, d ^ 1);
}
void calc_m() {
  for (int i = 0; i < nc; ++i) {
    bool flag = false;
    for (int j = 0; j < sc; ++j)
      if (np[i] == sp[j]) {
        flag = true;
        if (nk[i] > sk[j]) {
          tk[tc] = sk[j] + 1;
          tp[tc] = np[i];
          ++tc;
        }
      }
    if (!flag) {
      tk[tc] = 1;
      tp[tc] = np[i];
      ++tc;
    }
  }
  dfs_m(0, 1, 0);
  ans += M;
}
void dfs_s(int c, long long v) {
  if (v > N) return;
  if (c == sc) {
    ++ans;
    return;
  }
  for (int i = 0; i <= sk[c]; ++i) {
    dfs_s(c + 1, v);
    v *= primes[sp[c]];
  }
}
int main() {
  primeTable();
  for (scanf("%d", &T); T; --T) {
    scanf("%d%d%d%d%d%d%d%d%d", n, n + 1, n + 2, m, m + 1, m + 2, s, s + 1,
          s + 2);
    s[0] <<= 1;
    N = 1ll * n[0] * n[1] * n[2];
    M = 1ll * m[0] * m[1] * m[2];
    S = 1ll * s[0] * s[1] * s[2];
    fact(n, nc, np, nk);
    fact(m, mc, mp, mk);
    fact(s, sc, sp, sk);
    calc_m();
    dfs_s(0, 1);
    cout << ans << endl;
    if (T > 1) {
      nc = mc = sc = tc = 0;
      memset(np, 0, sizeof(np));
      memset(nk, 0, sizeof(np));
      memset(mp, 0, sizeof(np));
      memset(mk, 0, sizeof(np));
      memset(sp, 0, sizeof(np));
      memset(sk, 0, sizeof(np));
      memset(tp, 0, sizeof(np));
      memset(tk, 0, sizeof(np));
      ans = 0;
    }
  }
}
