#include<iostream>
#include<vector>
#include<map>
using namespace std;
vector<pair<long long,long long> > points;
long long gcd(long long a,long long b)
{
return (b == 0) ? a : gcd(b, a % b);
}
int maxPoints()
{
int res = 0;
for (int i = 0; i < points.size(); ++i)
{
map<pair<int, int>, int> m;
int duplicate = 1;
for (int j = i + 1; j < points.size(); ++j)
{
if (points[i].first== points[j].first&& points[i].second== points[j].second)
{
++duplicate;
continue;
}
long long x1=points[i].first;
long long x2=points[j].first;
long long y1=points[i].second;
long long y2=points[j].second;
if(x1*y2==y1*x2)
{
continue;
}
long long dx =x2*(x1*x1+y1*y1)-x1*(x2*x2+y2*y2);
long long dy =y2*(x1*x1+y1*y1)-y1*(x2*x2+y2*y2);
long long d = gcd(dx, dy);
++m[{dx / d, dy / d}];
}
res = max(res, duplicate);
map<pair<int,int>,int>::iterator it;
for(it = m.begin(); it != m.end(); ++it)
{
res = max(res, it->second + duplicate);
}
}
return res;
}
int main()
{
int n;
scanf("%d",&n);
long long x,y;
while(n--)
{
cin >> x >> y;
points.push_back(make_pair(x,y));
}
cout << maxPoints() << endl;
return 0 ;
}