#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> P;
typedef pair<ll, P> P3;
typedef pair<P ,P> PP;
constexpr ll MOD = ll(1e9) + 7;
constexpr int IINF = INT_MAX;
constexpr ll LLINF = LLONG_MAX;
constexpr int MAX_N = int(1e5) + 5;
constexpr double EPS = 1e-8;
constexpr int di[] = {0, 1, 0, -1}, dj[] = {1, 0, -1, 0};
#define REP(i, n) for (int i = 0; i < n; i++)
#define REPR(i, n) for (int i = n; i >= 0; i--)
#define SORT(v) sort((v).begin(), (v).end())
#define SORTR(v) sort((v).rbegin(), (v).rend())
#define ALL(v) (v).begin(), (v).end()

ll ans = 0;
vector<ll> x, y;
vector<bool> used;
map<P,ll> cnt;

ll gcd(ll p, ll q){
    if(q==0) return p;
    else return gcd(q, p%q);
}

P calc_line(int i, int j){
    ll dx, dy, g;
    dx = x[i] - x[j];
    dy = y[i] - y[j];
    if(dx < 0){
        dx *= -1;
        dy *= -1;
    }
    else if(dx == 0){
        dy = abs(dy);
    }
    g = gcd(abs(dx), abs(dy));
    return P(dx/g, dy/g);
}

void rec(int i){
    if(i<0){
        ll sum = 0;
        for(auto p : cnt){
            ll c = p.second;
            sum += c*(c-1)/2;
        }
        ans = max(ans, sum);
    }
    else if(used[i]) rec(i-1);
    else{
        used[i] = true;
        for(int j=i-1;j>=0;j--){
            if(used[j]) continue;
            P line = calc_line(i,j);
            used[j] = true;
            cnt[line]++;
            rec(i-1);
            used[j] = false;
            cnt[line]--;
        }
        used[i] = false;
    }
}

int main() {
    int m;
    cin >> m;
    x.resize(m);
    y.resize(m);
    used.resize(m);
    for(int i=0;i<m;i++){
        cin >> x[i] >> y[i];
    }
    rec(m-1);
    cout << ans << endl;
    return 0;
}

