import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Point[] points = new Point[n]; for (int i = 0; i < n; i++) { points[i] = new Point(sc.nextInt(), sc.nextInt()); } int max = 2; for (int i = 0; i < n - 1; i++) { HashMap sums = new HashMap<>(); for (int j = i + 1; j < n; j++) { Point p = points[i].get(points[j]); p.normalize(); sums.put(p, sums.getOrDefault(p, 0) + 1); } for (int x : sums.values()) { max = Math.max(max, x + 1); } } System.out.println(max); } static class Point { int x; int y; public Point(int x, int y) { this.x = x; this.y = y; } public Point get(Point p) { return new Point(x - p.x, y - p.y); } public void normalize() { if (x == 0) { y = 1; return; } if (y == 0) { x = 1; return; } boolean isMinus = false; if (x < 0) { x *= -1; isMinus ^= true; } if (y < 0) { y *= -1; isMinus ^= true; } int gcd = getGCD(x, y); x /= gcd; y /= gcd; if (isMinus) { y *= -1; } } private int getGCD(int a, int b) { if (a % b == 0) { return b; } else { return getGCD(b, a % b); } } public int hashCode() { return x + y; } public boolean equals(Object o) { Point p = (Point)o; return p.x == x && p.y == y; } public String toString() { return x + ":" + y; } } }