#include<stdio.h>
#define NMAX 1000
struct pct { int x,y; };
struct rpt { int dx,dy; };
int cmp(rpt a,rpt b)
{
return ((long long)a.dy*b.dx>(long long)b.dy*a.dx);
}
void poz(int st,int dr,int &piv,rpt x[])
{int i=st,j=dr,d=0;
rpt t;
while(i<j) { if(cmp(x[i],x[j]))
{
t=x[i];x[i]=x[j];x[j]=t;
d=1-d;
}
i+=d;
j-=1-d;
}
piv=i;
}
void qsrt(int left,int right,rpt x[])
{int piv;
if(left<right) {poz(left,right,piv,x);
qsrt(left,piv-1,x);
qsrt(piv+1,right,x);
}
}
int egal(rpt a,rpt b)
{
return ((long long)a.dy*b.dx==(long long)b.dy*a.dx);
}
int main()
{
freopen("trapez.in","r",stdin);
freopen("trapez.out","w",stdout);
int n,i,j,k,e,nrtrpz;
pct v[NMAX]={{0,0}};
rpt r[NMAX*(NMAX-1)/2]={{0,0}};
scanf("%d",&n);
i=0;
while(i<n) { scanf("%d%d",&v[i].x,&v[i].y);i++;}
k=0;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{r[k].dx=v[i].x-v[j].x;r[k].dy=v[i].y-v[j].y;k++;}
for(i=0;i<k;i++) printf("(%10d,%10d)\n",r[i].dx,r[i].dy);
printf("\n");
for(i=0;i<k;i++)
if(r[i].dy<0) {
r[i].dx=-r[i].dx;r[i].dy=-r[i].dy;
//t=r[i].p1;r[i].p1=r[i].p2;r[i].p2=t;
}
for(i=0;i<k;i++) printf("(%10d,%10d)\n",r[i].dx,r[i].dy);
printf("\n");
qsrt(0,k-1,r);
for(i=0;i<k;i++) printf("(%10d,%10d)\n",r[i].dx,r[i].dy);
printf("\n");
nrtrpz=0;
i=0;
while(i<k-1) {j=i+1;e=1;
while(egal(r[i],r[j])&&j<=k-1)
{ j++; e++;}
if(e>1)
nrtrpz+=e*(e-1)/2;
i=j;
}
printf("%d",nrtrpz);
return 0;
}