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

  vector<pair<int, int> > ten;
  int m;

int gcd(int x, int y){
  if(x>y)return gcd(y, x);
  if(x==0)return y;
  return gcd(x, y%x);
}

int calc(vector<pair<int, int> > &pairs){
  map<pair<int, int>, int > katamuki;
  for(int i=0;i<m/2;i++){
    pair<int, int> pairr = make_pair(ten[pairs[i].first].first - ten[pairs[i].second].first, ten[pairs[i].first].second - ten[pairs[i].second].second  );
    if(pairr.first == 0)katamuki[make_pair(0, 1)]++;
    else{
      if(pairr.first < 0){
      pairr.first *= -1;
      pairr.second *= -1;
    }
    int fuck = gcd(pairr.first, abs(pairr.second));
      pairr.first /= fuck;
      pairr.second /= fuck;
    katamuki[pairr]++;

  }
}
int ans=0;
for(auto i:katamuki){
  ans += i.second * (i.second - 1)/2;
}
return ans;
}

int dfs(vector<pair<int, int> > &pairs , set<int> &rest){
  if(pairs.size() == m/2)return calc(pairs);
  int maxx = 0;
  int i = *rest.begin();
  rest.erase(i);
    for(auto j: rest){
      pairs.push_back(make_pair(i, j));
      set<int> rest2 = rest;
      rest2.erase(j);
      maxx=max(maxx, dfs(pairs, rest2));
      pairs.pop_back();
    }
    return maxx;
}

int main(){
  scanf("%d", &m);
  for(int i=0;i<m;i++){
    int x,y;
    scanf("%d%d", &x, &y);
    ten.push_back(make_pair(x, y));
  }
  vector<pair<int, int> > pairs;
  set<int> rst;
  for(int i=0;i<m;i++)rst.insert(i);
  int ans = dfs(pairs, rst);
  printf("%d\n", ans);

  return 0;
}

