#include <bits/stdc++.h>
using namespace std;
struct pr {
  int val, nums;
} tp;
int cnt[3][1000005];
int num[3][3];
vector<pr> vec;
vector<long long> wtf;
long long temp, gg, mt, nowans;
long long ask(long long x, int y) {
  long long now = 1;
  while (y) {
    if (y % 2) now *= x;
    x *= x;
    y /= 2;
  }
  return now;
}
void go(int x, long long now, int flag) {
  if (x == wtf.size())
    nowans += now * flag;
  else {
    go(x + 1, now, flag);
    go(x + 1, now / wtf[x], flag * -1);
  }
}
void dfs(long long now, int f) {
  if (f == vec.size()) {
    temp++;
    return;
  }
  dfs(now, f + 1);
  for (int i = 1; i <= vec[f].nums; i++) {
    now *= vec[f].val;
    if (now > gg) return;
    dfs(now, f + 1);
  }
}
int main() {
  int t;
  long long zeze;
  scanf("%d", &t);
  while (t--) {
    vec.clear();
    wtf.clear();
    nowans = 0;
    mt = 1;
    gg = 1;
    temp = 0;
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 3; j++) {
        scanf("%d", &num[i][j]);
        if (i == 1) mt *= num[i][j];
        if (i == 0) gg *= num[i][j];
        for (int k = 2; k <= 1000; k++) {
          while (num[i][j] % k == 0) {
            cnt[i][k]++;
            num[i][j] /= k;
          }
        }
        if (num[i][j] > 1) {
          cnt[i][num[i][j]]++;
          if (cnt[i][num[i][j]] != 1) num[i][j] = 1;
        }
      }
    cnt[2][2]++;
    sort(num[2], num[2] + 3);
    for (int i = 2; i <= 1000; i++) {
      if (cnt[2][i] > 0) {
        tp.nums = cnt[2][i];
        tp.val = i;
        vec.push_back(tp);
      }
    }
    for (int i = 0; i < 3; i++) {
      if (num[2][i] > 1) {
        tp.nums = cnt[2][num[2][i]];
        tp.val = num[2][i];
        vec.push_back(tp);
      }
    }
    for (int i = 2; i <= 1000; i++) {
      if (cnt[0][i] > cnt[2][i]) {
        zeze = ask(i * 1LL, cnt[2][i] + 1);
        wtf.push_back(zeze);
      }
    }
    for (int i = 0; i < 3; i++) {
      if (num[0][i] == 1) continue;
      if (cnt[0][num[0][i]] > cnt[2][num[0][i]]) {
        zeze = ask(num[0][i] * 1LL, cnt[2][num[0][i]] + 1);
        wtf.push_back(zeze);
      }
    }
    go(0, mt, 1);
    dfs(1LL, 0);
    printf("%lld\n", nowans + temp);
    for (int i = 2; i <= 1000; i++) cnt[0][i] = cnt[1][i] = cnt[2][i] = 0;
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 3; j++) cnt[i][num[i][j]] = 0;
  }
  return 0;
}
