#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
bool Max(T1& a, T2 b) {
  return a < b ? a = b, 1 : 0;
}
template <typename T1, typename T2>
bool Min(T1& a, T2 b) {
  return a > b ? a = b, 1 : 0;
}
const int N = 1000001;
bool prime[N];
vector<int> pri;
vector<pair<int, int> > nv, sv;
vector<long long> tmp;
long long n, m, s;
long long ans;
void rec(int i, long long prod) {
  if (i == sv.size()) {
    ans++;
    return;
  }
  auto cur = sv[i];
  for (int j = 0; j < (cur.second + 1); ++j) {
    rec(i + 1, prod);
    if ((prod *= cur.first) > n) break;
  }
}
void rec2(int i, bool add, long long rem) {
  if (i == tmp.size()) {
    if (add)
      ans += rem;
    else
      ans -= rem;
    return;
  }
  rec2(i + 1, add, rem);
  rem /= tmp[i];
  if (!rem) return;
  rec2(i + 1, !add, rem);
}
long long pow(long long a, int p) {
  long long ret = 1;
  while (p) {
    if (p & 1) ret *= a;
    a *= a;
    p >>= 1;
  }
  return ret;
}
void solve() {
  long long v;
  n = 1;
  for (int i = 0; i < (3); ++i) {
    cin >> v;
    n *= v;
  }
  m = 1;
  for (int i = 0; i < (3); ++i) {
    cin >> v;
    m *= v;
  }
  s = 2;
  for (int i = 0; i < (3); ++i) {
    cin >> v;
    s *= v;
  }
  long long ts = s, tn = n;
  nv.clear();
  sv.clear();
  for (auto& e : pri) {
    if ((long long)e * e > ts) break;
    int cnt = 0;
    while (ts % e == 0) {
      cnt++;
      ts /= e;
    }
    if (cnt) sv.emplace_back(e, cnt);
  }
  if (ts > 1) sv.emplace_back(ts, 1);
  for (auto& e : pri) {
    if ((long long)e * e > tn) break;
    long long cnt = 0;
    while (tn % e == 0) {
      cnt++;
      tn /= e;
    }
    if (cnt) nv.emplace_back(e, cnt);
  }
  if (tn > 1) nv.emplace_back(tn, 1);
  ans = 0;
  rec(0, 1);
  sv.emplace_back(N, 1);
  tmp.clear();
  int i = 0;
  for (auto& e : nv) {
    while (sv[i].first < e.first) i++;
    if (sv[i].first > e.first) {
      tmp.emplace_back(e.first);
    } else {
      if (sv[i].second < e.second)
        tmp.emplace_back(pow(e.first, sv[i].second + 1));
      i++;
    }
  }
  rec2(0, 1, m);
  cout << ans << '\n';
}
void init() {
  for (int i = 2; i <= (N - 1); ++i)
    if (!prime[i]) {
      pri.emplace_back(i);
      for (long long j = (long long)i * i; j < N; j += i) prime[j] = 1;
    }
}
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.setf(ios::fixed);
  cout.precision(20);
  init();
  int TC = 1;
  cin >> TC;
  for (int TI = 1; TI <= (TC); ++TI) {
    solve();
  }
  return 0;
}
