#define _USE_MATH_DEFINES #include <algorithm> #include <array> #include <bitset> #include <cassert> #include <cctype> #include <climits> #include <clocale> #include <cmath> #include <complex> #include <cstdio> #include <cstdlib> #include <ctime> #include <deque> #include <fstream> #include <functional> #include <iomanip> #include <iostream> #include <iterator> #include <list> #include <map> #include <numeric> #include <queue> #include <regex> #include <set> #include <sstream> #include <stack> #include <string> #include <tuple> #include <unordered_map> #include <unordered_set> #include <utility> #include <vector> const int MOD = 1000000007; const int INF = 1000000000; //1e9 const int NIL = -1; const long long LINF = 1000000000000000000; // 1e18 const long double EPS = 1E-10; template<class T, class S> inline bool chmax(T &a, const S &b){ if(a < b){ a = b; return true; } return false; } template<class T, class S> inline bool chmin(T &a, const S &b){ if(b < a){ a = b; return true; } return false; } int main(){ int N; std::cin >> N; int ans(0); std::vector<int> X(N), Y(N); for(int i(0); i < N; ++i) std::cin >> X[i] >> Y[i]; for(int i(0); i < N; ++i){ for(int j(i+1); j < N; ++j){ int cnt(2); if(X[i] == X[j]){ for(int k(0); k < N; ++k){ if(k == i || k == j) continue; if(X[i] == X[k]) ++cnt; } }else if(Y[i] == Y[j]){ for(int k(0); k < N; ++k){ if(k == i || k == j) continue; if(Y[i] == Y[k]) ++cnt; } }else{ int dx(X[i]-X[j]), dy(Y[i]-Y[j]); for(int k(0); k < N; ++k){ if(k == i || k == j) continue; int Dx(X[i]-X[k]), Dy(Y[i]-Y[k]); if(dx*Dy == dy*Dx) ++cnt; } } chmax(ans, cnt); } } std::cout << ans << std::endl; return 0; }