#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#define ll long long
#define INF 0x3f3f3f3f 
#define MEM(x,y) memset(x,y,sizeof(x))
#define int long long
#define rep(i , a , b) for(int i = a ; i <= b ; i ++)
#define P pair<int,int>
#define  sc(a) scanf("%lld",&a)
#define pf(a) printf("%lld ",a)
using namespace std;
struct point
{
	int x;
	int y;
}point [20];
struct xia
{
	int x;
	int y;
}v[10];
int vis[20];
int maxx;
int n, q;
void ju()
{
	int temp = 0;
	for (int i = 0; i < q; i++)
		for (int j = i+1; j < q; j++)
			if (v[i].x * v[j].y == v[i].y * v[j].x)
				temp++;
	maxx = max(temp, maxx);
	return;
}
void dfs(int x)
{
	while (vis[x])x++;
	if (x >= n) {
		ju();
		return;
	}
	vis[x] = 1;
	for (int i = 0; i < n; i++)
	{
		if (!vis[i])
		{
			vis[i] = 1;
			int dy = point[x].y - point[i].y;
			int dx = point[x].x - point[i].x;
			v[q].x = dx, v[q].y = dy;
			q++;
			dfs(x + 1);
			q--;
			vis[i] = 0;
		}
	}
	vis[x] = 0;
	return;
}
signed main()
{
	sc(n);
	MEM(vis, 0);
	rep(i, 0, n - 1)
		sc(point[i].x), sc(point[i].y);
	dfs(0);
	cout << maxx << endl;
}










