#include <bits/stdc++.h>
using namespace std;
long long n, m, S, ans;
int a[3], b[3], s[3];
vector<long long> cc;
map<int, int> sp, np;
inline void trans_(map<int, int>::iterator x, long long sum) {
  if (sum > n) return;
  if (x == sp.end()) return ++ans, void();
  long long now = 1;
  for (int i = 0; i <= x->second; ++i) {
    x++;
    trans_(x, sum * now);
    x--;
    now *= x->first;
  }
}
int main() {
  int Test_;
  scanf("%d", &Test_);
  while (Test_--) {
    ans = 0;
    n = m = 1, S = 2;
    sp.clear(), np.clear(), cc.clear();
    scanf("%d%d%d%d%d%d%d%d%d", a, a + 1, a + 2, b, b + 1, b + 2, s, s + 1,
          s + 2);
    n = n * a[0] * a[1] * a[2], m = m * b[0] * b[1] * b[2],
    S = S * s[0] * s[1] * s[2];
    sp[2] = 1;
    for (int i = 2; i <= 1000; ++i) {
      for (int j = 0; j <= 2; ++j)
        while (a[j] % i == 0) a[j] /= i, ++np[i];
      for (int j = 0; j <= 2; ++j)
        while (s[j] % i == 0) s[j] /= i, ++sp[i];
    }
    for (int i = 0; i <= 2; ++i)
      if (a[i] > 1) ++np[a[i]];
    for (int i = 0; i <= 2; ++i)
      if (s[i] > 1) ++sp[s[i]];
    trans_(sp.begin(), 1);
    for (map<int, int>::iterator i = np.begin(); i != np.end(); i++)
      if (sp[i->first] < i->second) {
        long long x = 1;
        for (int j = sp[i->first] + 1; j >= 1; --j) x = x * i->first;
        cc.push_back(x);
      }
    int size = cc.size();
    for (int i = (1 << size) - 1; i >= 0; --i) {
      long long x = m;
      int opt = 1;
      for (int j = 1; j <= size; ++j)
        if (i >> j - 1 & 1) opt *= -1, x /= cc[j - 1];
      ans += opt * x;
    }
    printf("%lld\n", ans);
  }
}
