#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000000 + 10;
const int maxm = 1000;
long long N, M, S, num;
long long ans;
int prime[maxn], cnt;
bool vis[maxn];
int sta[maxm], topa;
int tota[maxm];
int stb[maxm], topb;
int totb[maxm];
long long fac[maxm];
int tail;
inline long long power(long long a, int b) {
  long long res = 1;
  for (; b; a *= a, b >>= 1)
    if (b & 1) res *= a;
  return res;
}
inline void init() {
  for (int i = 2; i < maxn; i++) {
    if (!vis[i]) prime[++cnt] = i;
    for (int j = 1, k; (k = prime[j] * i) < maxn; j++) {
      vis[k] = 1;
      if (i % prime[j] == 0) break;
    }
  }
}
inline void dfs(int u, long long pro = 1) {
  if (u > topa) {
    return (void)(ans += pro <= N);
  }
  long long base = 1;
  for (int i = 0; i <= tota[u]; i++) {
    if (num / base < pro) return;
    dfs(u + 1, pro * base);
    base *= sta[u];
  }
}
inline void dfs2(int u, int cnt, long long pro) {
  if (u > tail) return (void)(ans += cnt & 1 ? -M / pro : M / pro);
  dfs2(u + 1, cnt + 1, pro * fac[u]);
  dfs2(u + 1, cnt, pro);
}
int main() {
  if (fopen("819C.in", "r") != NULL) {
    freopen("819C.in", "r", stdin);
    freopen("819C.out", "w", stdout);
  }
  init();
  int T;
  scanf("%d", &T);
  for (int kase = 1; kase <= T; kase++) {
    ans = 0;
    int n1, n2, n3;
    scanf("%d%d%d", &n1, &n2, &n3);
    int m1, m2, m3;
    scanf("%d%d%d", &m1, &m2, &m3);
    int s1, s2, s3;
    scanf("%d%d%d", &s1, &s2, &s3);
    N = (long long)n1 * n2 * n3;
    M = (long long)m1 * m2 * m3;
    S = (long long)s1 * s2 * s3;
    num = S << 1;
    long long tmp = num;
    topa = 0;
    for (int i = 1; i <= cnt; i++)
      if (tmp % prime[i] == 0) {
        tota[++topa] = 0;
        sta[topa] = prime[i];
        do {
          tota[topa]++;
          tmp /= prime[i];
        } while (tmp % prime[i] == 0);
      }
    tmp = N;
    topb = 0;
    for (int i = 1; i <= cnt; i++)
      if (tmp % prime[i] == 0) {
        totb[++topb] = 0;
        stb[topb] = prime[i];
        do {
          totb[topb]++;
          tmp /= prime[i];
        } while (tmp % prime[i] == 0);
      }
    int SB = 0;
    for (int i = 1, _ = sqrt(num); i <= _; i++) {
      if (num % i == 0) {
        SB++;
        if (i * i != num) SB++;
      }
    }
    dfs(1);
    tail = 0;
    int pi = 1, pj = 1;
    for (; pi <= topa && pj <= topb;) {
      if (sta[pi] == stb[pj]) {
        if (tota[pi] < totb[pj]) fac[++tail] = power(sta[pi], tota[pi] + 1);
        pi++, pj++;
        continue;
      }
      if (sta[pi] < stb[pj]) {
        pi++;
        continue;
      }
      fac[++tail] = stb[pj++];
    }
    while (pj <= topb) fac[++tail] = stb[pj++];
    dfs2(1, 0, 1);
    printf("%lld\n", ans);
  }
  return 0;
}
