#include <iostream>
#include <fstream>
#include <unordered_map>
#include <algorithm>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
pair <int, int> p[1001];
unordered_map <pair <int, int>, int> m;
int gcd(int a, int b)
{
int r;
while (b)
{
r = a%b;
a = b;
b = r;
}
return a;
}
int main()
{
int n, i, j, gcdv;
int rasp = 0;
map <pair <int, int>, int>::iterator it;
fin >> n;
for (i = 1; i<=n; i++)
fin >> p[i].first >> p[i].second;
sort(p+1, p+n+1);
for (i = 1; i<=n; i++)
for (j = i+1; j<=n; j++)
{
gcdv = gcd(p[j].first - p[i].first, abs(p[j].second - p[i].second));
++m[{(p[j].first - p[i].first)/gcdv, (p[j].second - p[i].second)/gcdv}];
}
for (it = m.begin(); it != m.end(); it++)
rasp = rasp + it->second*(it->second-1)/2;
fout << rasp;
return 0;
}