#!/usr/bin/ python3.8 import sys read = sys.stdin.buffer.read readline = sys.stdin.buffer.readline readlines = sys.stdin.buffer.readlines import numpy as np N = int(readline()) XN = [[0] for _ in range(3)] XD = [[1] for _ in range(3)] m = map(int, read().split()) for p, a, b in zip(m, m, m): XN[p].append(b) XD[p].append(a + b) XN.sort(key=len) XD.sort(key=len) for i in range(3): XN[i] = np.array(XN[i], np.int64) XD[i] = np.array(XD[i], np.int64) eps = 1e-12 X = XN[0] / XD[0] Y = XN[1] / XD[1] Z = XN[2] / XD[2] X.sort() Y.sort() Z.sort() add_XY = np.add.outer(X, Y).ravel() max_XY = np.maximum.outer(X, Y).ravel() cnt_Z = np.searchsorted(Z, 1 - max_XY + eps) answer = (cnt_Z * (add_XY < 1 + eps)).sum() # 1点で交わるものを除く:厳密値で行う den = np.multiply.outer(XD[0], XD[1]).ravel() num = den - (np.multiply.outer(XN[0], XD[1]) + np.multiply.outer(XD[0], XN[1])).ravel() g = np.abs(np.gcd(den, num)) den //= g num //= g key = (den << 32) + num g = np.gcd(XN[2], XD[2]) num = XN[2] // g den = XD[2] // g key_Z = (den << 32) + num key.sort() key_Z.sort() answer -= np.sum(np.searchsorted(key, key_Z, 'right') - np.searchsorted(key, key_Z, 'left')) print(answer)