import std; alias P = Tuple!(int, "x", int, "y"); int calc(P[] ps) { int ans = 0; foreach (i; 0..ps.length) { foreach (j; i+1..ps.length) { int cnt = 2; foreach (k; 0..ps.length) { if (k == i || k == j) continue; auto x1 = ps[k].x - ps[i].x; auto y1 = ps[k].y - ps[i].y; auto x2 = ps[k].x - ps[j].x; auto y2 = ps[k].y - ps[j].y; if (x1 * y2 == x2 * y1) cnt++; } ans = max(ans, cnt); } } return ans; } void main() { int n; scan(n); P[] ps; foreach (_; 0..n) { int x, y; scan(x, y); ps ~= P(x, y); } writeln(calc(ps)); } void scan(T...)(ref T a) { string[] ss = readln.split; foreach (i, t; T) a[i] = ss[i].to!t; } T read(T)() { return readln.chomp.to!T; } T[] reads(T)() { return readln.split.to!(T[]); } alias readint = read!int; alias readints = reads!int;