#include <bits/stdc++.h>
using namespace std;
long long A[3][3], Lis[3][777], S[3][777], T[3], B[2222];
long long V[3];
void deal(int x) {
  T[x] = 0;
  for (int i = 2; i <= 2000; i++)
    if (!B[i]) {
      bool flag = 0;
      for (int j = 0; j < 3; j++)
        if (A[x][j] % i == 0) {
          if (!flag) T[x]++, flag = 1, S[x][T[x]] = i, Lis[x][T[x]] = 1;
          while (A[x][j] % i == 0) A[x][j] /= i, Lis[x][T[x]] *= i;
        }
    }
  sort(A[x], A[x] + 3);
  for (int j = 0; j < 3; j++)
    if (A[x][j] != 1) S[x][++T[x]] = A[x][j], Lis[x][T[x]] = S[x][T[x]];
}
long long calc(long long a, long long v, long long b) {
  long long L[77], t = 0;
  if (b == -1)
    memcpy(L, S[a], sizeof L), t = T[a];
  else
    for (int i = 1, j = 1; i <= T[a]; i++) {
      while (S[a][i] > S[b][j] && j <= T[b]) j++;
      if (S[a][i] == S[b][j] && Lis[a][i] > Lis[b][j])
        L[++t] = Lis[b][j] * S[b][j];
      else if (S[a][i] != S[b][j])
        L[++t] = S[a][i];
    }
  long long ans = 0, tmp = 1;
  for (int i = 0;; i++) {
    ans += (__builtin_popcount(i) & 1 ? -1 : 1) * (v / tmp);
    if (i + 1 == (1 << t)) break;
    int o = 0;
    for (; (i >> o) & 1; o++) tmp /= L[o + 1];
    tmp *= L[o + 1];
  }
  return ans;
}
long long P[2000010], Q[2000010], tp, tq;
long long calc2(int a, long long X) {
  int md = T[a] / 2;
  tp = tq = P[1] = Q[1] = 1;
  for (int i = 1; i <= md; i++) {
    int tt = tp;
    for (int j = 1; j <= tp; j++)
      for (long long k = S[a][i]; k <= Lis[a][i]; k *= S[a][i])
        P[++tt] = P[j] * k;
    tp = tt;
  }
  for (int i = T[a]; i > md; i--) {
    int tt = tq;
    for (int j = 1; j <= tq; j++)
      for (long long k = S[a][i]; k <= Lis[a][i]; k *= S[a][i])
        Q[++tt] = Q[j] * k;
    tq = tt;
  }
  int t = tp;
  long long ans = 0;
  sort(P + 1, P + tp + 1), sort(Q + 1, Q + tq + 1);
  for (int i = 1; i <= tq; i++) {
    while (t && P[t] * Q[i] > X) t--;
    ans += t;
  }
  return ans;
}
int main() {
  int T;
  scanf("%d", &T);
  for (int i = 2; i <= 2000; i++)
    if (!B[i])
      for (int j = i + i; j <= 2000; j += i) B[j] = 1;
  while (T--) {
    for (int i = 0; i < 3; i++) {
      V[i] = 1;
      for (int j = 0; j < 3; j++) scanf("%lld", &A[i][j]), V[i] *= A[i][j];
    }
    memset(S, 0, sizeof S), memset(Lis, 0, sizeof Lis);
    V[2] *= 2, A[2][0] *= 2;
    for (int i = 0; i < 3; i++) deal(i);
    printf("%lld\n", calc(0, V[1], 2) + calc2(2, V[0]));
  }
  return 0;
}
