#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define F first
#define S second
#define pii pair<int, int>
#define eb emplace_back
#define all(v) v.begin(), v.end()
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define rep3(i, l, n) for (int i = l; i < (n); ++i)
#define sz(v) (int)v.size()
#define inf (int)(1e9+7)
template<typename T1, typename T2> inline bool chmin(T1 &a, T2 b) { if (a > b) { a = b; return 1; } return 0; }
template<typename T1, typename T2> inline bool chmax(T1 &a, T2 b) { if (a < b) { a = b; return 1; } return 0; }
template<typename T> T gcd(T a, T b) { if (b == 0) return a; return gcd(b, a % b); }



// http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=3968082#2
// bit dpで書いてみる
// dfsをdpで書くということ
// 上のコードは以下を参考にした
// http://kyopro.hateblo.jp/entry/2018/02/12/080534


int m;
int ans;
vector<pii> v(20);

pii incline(int i, int j) {
    pii s;
    s.F = v[j].S - v[i].S;
    s.S = v[j].F - v[i].F;
    int g = gcd(s.F, s.S);
    s.F /= g;
    s.S /= g;
    if (s.S < 0) { s.S = -s.S; s.F = -s.F; }
    return s;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    
    cin >> m;
    rep(i, m) cin >> v[i].F >> v[i].S;
    
    int dp[1 << 20] = {0};
    
    rep(bit, 1 << m) {
        rep(i, m) {
            if (bit & (1 << i)) continue;
            rep3(j, i + 1, m) {
                if (bit & (1 << j)) continue;
                pii s = incline(i, j);
                int B = bit | (1 << i);
                B |= (1 << j);
                int num = 1;
                rep(k, m) {
                    if (B & (1 << k)) continue;
                    rep3(l, k + 1, m) {
                        if (B & (1 << l)) continue;
                        pii t = incline(k, l);
                        if (s != t) continue;
                        B |= (1 << k); B |= (1 << l);
                        num++;
                        // cout << endl << i << " " << j << " " << k << " " << l << " " << endl << s.F << " " << s.S << " " << t.F << " " << t.S << endl;
                    }
                }
                if (num == 1) continue;
                chmax(dp[B], dp[bit] + num * (num - 1) / 2);
            }
            
        }
    }
    int ans = 0;
    rep(i, 1 << m) chmax(ans, dp[i]);
    cout << ans << endl;
    // rep(i, 1 << m) cout << dp[i] << " "; cout << endl;
}



