#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
int prime[N], num;
int vst[N], d[N];
inline void Pre(int n) {
  for (int i = 2; i <= n; i++) {
    if (!vst[i]) prime[++num] = i, d[i] = i;
    for (int j = 1; j <= num && (long long)i * prime[j] <= n; j++) {
      vst[i * prime[j]] = 1;
      d[i * prime[j]] = prime[j];
      if (i % prime[j] == 0) break;
    }
  }
}
int X[3][3];
long long ans = 0;
namespace Work1 {
long long n, S, m;
int _c[N];
int p[N], c[N], b[N], pnt;
int a[N];
inline void dfs(int t, long long D) {
  if (t == pnt + 1) {
    int x = 0, y = 0;
    for (int i = 1; i <= pnt; i++)
      if (a[i])
        if (a[i] - 1 == b[i])
          x++;
        else
          y++;
    if (y == 0)
      if (x & 1)
        ans -= m / D;
      else
        ans += m / D;
    return;
  }
  for (int i = 0; i <= min(c[t], b[t] + 1); i++)
    a[t] = i, dfs(t + 1, D), D *= p[t];
}
vector<int> pp;
int vst[N], clk;
inline void Solve() {
  S = (long long)X[2][0] * X[2][1] * X[2][2];
  S <<= 1;
  m = (long long)X[1][0] * X[1][1] * X[1][2];
  pp.clear();
  ++clk;
  for (int i = 0; i < 3; i++) {
    int x = X[0][i];
    while (x > 1) {
      if (vst[d[x]] != clk) pp.push_back(d[x]), vst[d[x]] = clk;
      _c[d[x]]++, x /= d[x];
    }
  }
  pnt = 0;
  for (int i : pp) p[++pnt] = i, c[pnt] = _c[i];
  for (int i = 1; i <= pnt; i++) {
    b[i] = 0;
    while (S % p[i] == 0) b[i]++, S /= p[i];
  }
  dfs(1, 1);
  for (int i = 0; i < 3; i++) {
    int x = X[0][i];
    while (x > 1) _c[d[x]]--, x /= d[x];
  }
}
}  // namespace Work1
namespace Work2 {
long long n, S;
int c[N];
int p[N], q[N], pnt;
inline void dfs(int t, long long d) {
  if (d > n) return;
  if (t == pnt + 1) {
    ans++;
    return;
  }
  for (int i = 0; i <= q[t]; i++) dfs(t + 1, d), d *= p[t];
}
vector<int> pp;
int vst[N], clk;
inline void Solve() {
  n = (long long)X[0][0] * X[0][1] * X[0][2];
  c[2]++;
  pp.clear();
  ++clk;
  vst[2] = clk;
  pp.push_back(2);
  for (int i = 0; i < 3; i++) {
    int x = X[2][i];
    while (x > 1) {
      if (vst[d[x]] != clk) pp.push_back(d[x]), vst[d[x]] = clk;
      c[d[x]]++, x /= d[x];
    }
  }
  pnt = 0;
  for (int i : pp) p[++pnt] = i, q[pnt] = c[i];
  dfs(1, 1);
  c[2]--;
  for (int i = 0; i < 3; i++) {
    int x = X[2][i];
    while (x > 1) c[d[x]]--, x /= d[x];
  }
}
}  // namespace Work2
int main() {
  int T;
  Pre(1e6);
  scanf("%d", &(T));
  while (T--) {
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 3; j++) scanf("%d", &(X[i][j]));
    ans = 0;
    Work1::Solve();
    long long tmp = ans;
    Work2::Solve();
    printf("%I64d\n", ans);
  }
  return 0;
}
