#include <bits/stdc++.h>
using namespace std;
struct rec {
  long long w, h, c;
} a[200010] = {0};
int n;
long long ans;
vector<long long> p, sum;
double ABS_dec(double x1, double x2) {
  if (x1 < x2) return x2 - x1;
  return x1 - x2;
}
void quick_sort(struct rec a[], long h, long e) {
  long i = h, j = e;
  struct rec val;
  val = a[(h + e) / 2];
  a[(h + e) / 2] = a[h];
  do {
    while (i < j && ((val.w < a[j].w) || (val.w == a[j].w && val.h < a[j].h)))
      j--;
    if (i < j) a[i++] = a[j];
    while (i < j && ((val.w > a[i].w) || (val.w == a[i].w && val.h > a[i].h)))
      i++;
    if (i < j) a[j--] = a[i];
  } while (i < j);
  a[i] = val;
  if (i - 1 > h) quick_sort(a, h, i - 1);
  if (i + 1 < e) quick_sort(a, i + 1, e);
}
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
void DFS(int i, long long k, long long gh) {
  if (i < p.size()) {
    int j;
    DFS(i + 1, k, gh);
    for (j = 1; j <= sum[i]; j++) {
      k *= p[i];
      DFS(i + 1, k, gh);
    }
  } else {
    k = a[1].c / k;
    if (gh % k == 0) ans++;
  }
}
bool Is_valid() {
  long long i, j, q;
  long long gw, gh, k;
  double tmp;
  gw = gh = a[1].c;
  ans = 0;
  for (i = 2; i <= n; i++) {
    if (a[i].w != a[i - 1].w)
      break;
    else
      gw = gcd(gw, a[i].c);
  }
  if (i <= n) {
    q = i - 1;
    if (n % q) return false;
    i = 1;
    while (i + q <= n) {
      if (a[i].w == a[i + q].w || a[i].h != a[i + q].h) return false;
      gh = gcd(gh, a[i + q].c);
      for (j = i + 1; j < i + q; j++) {
        if (a[j + q].w != a[j + q - 1].w) return false;
        if (a[j + q].h != a[j].h) return false;
        if (ABS_dec((double)a[j].c / a[j - 1].c,
                    (double)a[j + q].c / a[j + q - 1].c) > 0.0000001)
          return false;
      }
      i += q;
    }
  }
  k = gw;
  for (i = 2; i <= sqrt(k); i++)
    if (k % i == 0) {
      p.push_back(i);
      sum.push_back(0);
      while (k % i == 0) k /= i, sum[sum.size() - 1]++;
    }
  if (k > 1) p.push_back(k), sum.push_back(1);
  DFS(0, 1, gh);
  return true;
}
int main() {
  int i, j, k;
  bool isYES = true;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%I64d %I64d %I64d", &a[i].w, &a[i].h, &a[i].c);
  }
  quick_sort(a, 1, n);
  Is_valid();
  printf("%I64d", ans);
}
