#include <bits/stdc++.h>
using namespace std;
struct P {
  double x, y, vx, vy;
  inline void rd() {
    double t1, t2;
    scanf("%lf%lf%lf%lf%lf%lf", &t1, &x, &y, &t2, &vx, &vy);
    t2 -= t1;
    vx = (vx - x) / t2;
    vy = (vy - y) / t2;
    x -= vx * t1;
    y -= vy * t1;
  }
} p[1100], q;
struct V {
  double x, y;
} b[1100];
inline double det(const V& a, const V& b) { return a.x * b.y - a.y * b.x; }
inline bool cmp(const V& a, const V& b) {
  if (abs(det(a, b)) < 1e-7)
    return (abs(a.x - b.x) < 1e-7) ? a.y < b.y : a.x < b.x;
  return det(a, b) < 0;
}
int n, ans, tot, cnt;
double a[1100];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) p[i].rd();
  for (int i = 1; i <= n; i++) {
    tot = 0;
    for (int j = 1; j <= n; j++)
      if (i ^ j) {
        q.x = p[j].x - p[i].x;
        q.y = p[j].y - p[i].y;
        q.vx = p[j].vx - p[i].vx;
        q.vy = p[j].vy - p[i].vy;
        double t = q.vx ? q.x / q.vx : (q.vy ? q.y / q.vy : 0);
        if (abs(q.x - q.vx * t) < 1e-7 && abs(q.y - q.vy * t) < 1e-7) {
          a[++tot] = t;
          b[tot].x = q.vx;
          b[tot].y = q.vy;
        }
      }
    sort(a + 1, a + tot + 1);
    cnt = 0;
    for (int j = 1; j <= tot; j++) {
      cnt = (abs(a[j] - a[j - 1]) < 1e-7) ? cnt + 1 : 1;
      ans = max(ans, cnt);
    }
    sort(b + 1, b + tot + 1, cmp);
    cnt = 1;
    for (int j = 2; j <= tot; j++) {
      if (abs(det(b[j], b[j - 1])) < 1e-7) {
        if (abs(b[j].x - b[j - 1].x) > 1e-7 || abs(b[j].y - b[j - 1].y) > 1e-7)
          cnt++;
      } else
        cnt = 1;
      ans = max(ans, cnt);
    }
  }
  printf("%d\n", ans + 1);
  return 0;
}
