#include<stdio.h>
#include<math.h>
#define NMAX 1500
#define DIF 0.001
struct pct{ double x,y;};
pct v[NMAX];
void poz(int stg,int dr,int &piv){
int i=stg,j=dr,d=0;
pct aux;
while(i<j){
if(v[i].x>v[j].x||
fabs(v[i].x-v[j].x)<0.001&&v[i].y>v[j].y){
aux=v[i];v[i]=v[j];v[j]=aux;d=1-d;
}
i+=d;
j-=1-d;
}
piv=i;
}
void qsort(int li,int ls){
int piv;
if(li<ls){
poz(li,ls,piv);
qsort(li,piv-1);
qsort(piv+1,ls);
}
}
int main(){
freopen("triang.in","r",stdin);
freopen("triang.out","w",stdout);
int i,j,k,n,nrtr=0,up;
double x,y,d1,d1p,dx,dy,r3,r32,
dx2,dy2,dxop,dyop,xmin,xmax,ymin,ymax,xx1;
scanf("%d",&n);
r3=sqrt(3);
r32=r3/2;
for(i=0;i<n;i++) {scanf("%lf%lf",&x,&y);v[i].x=x;v[i].y=y;}
qsort(0,n-1);
for(i=0;i<n-2;i++){
for(j=i+1;j<n-1;j++){
dx=v[j].x-v[i].x;
if(v[j].y>=v[i].y) {up=1;dy=v[j].y-v[i].y;}
else {up=0;dy=v[i].y-v[j].y;}
if(dy<dx/r3-DIF) continue;
dxop=dx/2+dy*r32;
xx1=dx*r32;
if(up) dyop=dy/2-xx1;
else dyop=xx1-dy/2;
xmin=v[i].x+dxop;
xmax=xmin+DIF;
xmin=xmin-DIF;
ymin=v[i].y+dyop;
ymax=ymin+DIF;
ymin=ymin-DIF;
for(k=j+1;k<n&&v[k].x<xmax;k++){
if(v[k].x<xmin||v[k].y<ymin||v[k].y>ymax) continue;
/* if(v[k].y<ymin||v[k].y>ymax) continue;*/
nrtr++;
/* printf("%0.4lf %0.4lf ",v[i].x,v[i].y);
printf("%0.4lf %0.4lf ",v[j].x,v[j].y);
printf("%0.4lf %0.4lf\n",v[k].x,v[k].y);}*/
}
}
}
printf("%d",nrtr);
return 0;
}