#include <iostream>
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f ("trapez.in");
ofstream g ("trapez.out");
struct coordonate
{
int x,y;
} v[1000];
int n,i,j,k,lungime_secventa, nr_trapeze;
double panta[1000];
int main()
{
f>>n;
for(int i=0; i<n; i++)
f>>v[i].x>>v[i].y;
for(int i=0; i<n-1; i++)
for(int j=i+1; j<n; j++)
{
///Aflam panta pentru fiecare dreapta care se poate forma
if(v[i].x-v[j].x)
{
panta[k++] = (double)(v[i].y-v[j].y)/(v[i].x-v[j].x);
}
}
sort(panta,panta+k);
lungime_secventa = 1;
panta[k+1] = -1;
for(int i=0; i<k-1; i++)
{
if(panta[i] != panta[i+1])
{
nr_trapeze += ((lungime_secventa - 1) *lungime_secventa)/2;
///Doua drepte sunt parelele daca au pantele egale,
///vedem cate drepte cu aceeasi panta avem
///si calculam combinari de n luate cate 2 pentru a vedea cate trepeze putem forma
lungime_secventa = 1;
}
else
lungime_secventa ++;
}
g<<nr_trapeze;
return 0;
}