#include <bits/stdc++.h>
using namespace std;

#define INF_LL (int64)1e18
#define INF (int64)1e9
#define REP(i, n) for(int64 i = 0; i < (n); i++)
#define FOR(i, a, b) for(int64 i = (a); i < (b); i++)
#define all(x) x.begin(),x.end()
#define fs first
#define sc second

using int32 = int_fast32_t;
using uint32 = uint32_t;
using int64 = int64_t;
using uint64 = uint64_t;
using PII = pair<int32, int32>;
using PLL = pair<int64, int64>;

template<typename A, typename B> inline void chmin(A &a, B b) { if (a > b) a = b; }
template<typename A, typename B> inline void chmax(A &a, B b) { if (a < b) a = b; }

int64 m;
using Line = pair<PLL, PLL>;
vector<PLL> pts;
vector<Line> ls;
int64 dp[17][1 << 16] = {};

bool isParallel(Line a, Line b) {
  PLL aa = PLL(a.sc.fs-a.fs.fs, a.sc.sc-a.fs.sc), bb = PLL(b.sc.fs-b.fs.fs, b.sc.sc-b.fs.sc);
//  cout << aa.fs << " " << aa.sc << ": " << bb.fs << " " << bb.sc << endl;
  if (aa.fs*bb.sc-aa.sc*bb.fs == 0) {
    return 1;
  } else {
    return 0;
  }
}

int64 dfs(int64 d=0, int64 used=0) {
  if (used == (1 << m) -1) {
    int64 sum = 0;
    REP(i, m/2) {
      FOR(j, i+1, m/2) {
        sum += isParallel(ls[i], ls[j]);
      }
    }
//    cout << sum << endl;
    return sum;
  }
  while ((used >> d) & 1) d++;
  FOR(i, d+1, m) {
    if (used >> i & 1) continue;
    ls.push_back({pts[i], pts[d]});
    chmax(dp[d][used], dfs(d+1, used | (1 << d) | (1 << i)));
    ls.pop_back();
  }
  return dp[d][used];
}

int main(void) {
  cin >> m;
  REP(i, m) {
    PLL p;
    cin >> p.fs >> p.sc;
    pts.push_back(p);
  }
  memset(dp, -1, sizeof dp);
  cout << dfs() << endl;
}
