#include #include #include #include using namespace std; struct frac { long long a, b; bool operator < (const frac & you) const { if (b == 0) return false; if (you.b == 0) return true; return a * you.b < you.a * b; } frac () {} frac (int a, int b) : a(a), b(b) {} }; map ma; set > S; int n, a, b, c, ret; int gcd (int a, int b) { if (a == 0 || b == 0) return max(a, b); return __gcd(a, b); } int main(int argc, const char * argv[]) { cin >> n; for(int i = 0; i < n; i++) { cin >> a >> b >> c; int g = gcd(gcd(abs(a), abs(b)), abs(c)); if (a < 0) { a = -a; b = -b; c = -c; } else if (a == 0 && b < 0) { b = -b; c = -c; } a /= g; b /= g; c /= g; pair li; if (a == 0) li = make_pair(frac(b, a), frac(c, b)); else li = make_pair(frac(b, a), frac(c, a)); if (S.find(li) == S.end()) { S.insert(li); ret = max(ret, ++ma[frac(b, a)]); } } cout << ret << endl; return 0; }