#include using namespace std; //using Graph = vector>; using dou =long double; string yes="yes"; string Yes="Yes"; string YES="YES"; string no="no"; string No="No"; string NO="NO"; template inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; } #define rep(i, n) for(int i = 0; i < (int)(n); i++) #define brep(n) for(int bit=0;bit<(1<= (int)0; i--) #define rrep(i,m,n) for(ll i = m; i < (ll)(n); i++) #define reprep(i,j,h,w) rep(i,h)rep(j,w) #define all(x) (x).begin(),(x).end() #define VEC(type,name,n) std::vector name(n);rep(i,n)std::cin >> name[i]; #define pb push_back #define pf push_front #define query int qq;std::cin >> qq;rep(qqq,qq) #define lb lower_bound #define ub upper_bound #define fi first #define se second #define itn int #define mp make_pair #define sum(a) accumulate(all(a),0ll) #define keta fixed< > name(m,vector (n,a)) #define vvvector(name,t,l,m,n,a) vector > > name(l, vector >(m, vector(n,a))); #define vvvvector(name,t,k,l,m,n,a) vector > > > name(k,vector > >(l, vector >(m, vector(n,a)) )); #define case std::cout <<"Case #" <() typedef long long ll; typedef pair P; typedef pair PL; //typedef long long T; const int INF = 1000000000; const double dINF = 1000000000; const ll INF64 = 922337203685477580ll; const ll MOD = 1000000007ll; const dou pi=3.141592653589793; //メモ //二次元配列のresizeのしかた //vv.resize(n); //for(size_t i=0; i> n; std::vector x(n),y(n); rep(i,n)std::cin >> x[i]>>y[i]; rep(i,n){ rep(j,n){ if(i==j)continue; int c=2; double d; if(y[i]!=y[j])d=(x[i]-x[j])/(y[i]-y[j]); else d=dINF; rep(ii,n){ if(ii==i||ii==j)continue; if(d==dINF){ if(y[i]==y[ii])c++; } else{ if(d==(x[i]-x[ii])/(y[i]-y[ii]))c++; } } chmax(ans,c); } } std::cout << ans << std::endl; }