#include <algorithm>
#include "stdafx.h"
#include <iostream>
#include <set>
#include <string>
#include<list>
//#include<point.h>
class point
{
public:
int x;
int y;
point(int a,int b);
public:
~point(void);
};
#include "StdAfx.h"
point::point(int a,int b)
{
x=a;
y=b;
}
point::~point(void)
{
}
using namespace std;
bool operator ==(point f,point g)//重载 == 运算符
{
if (f.x==g.x&&f.y==g.y)
return true;
return false;
}
bool operator <=(point f,point g)
{
if (f.x<g.x|| (f.x==g.x && f.y>=g.y))
return true;
return false;
}
bool operator <(point f,point g)//重载 < 运算符
{
if (f.x<g.x|| (f.x==g.x && f.y>g.y))
return true;
return false;
}
int main(int argc, char* argv[])
{
int i,j,k;
set <point> points;
set <point > other;
set<point>::iterator iter[2];
int a,b;
int winN;
winN=0;
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
//******************************************
int number_of_point ;
cin>>number_of_point;//in.txt文件首行是点的个数,然后是每行一个点的坐标
for (j =0 ; j<number_of_point; j++)
{
cin>>a;
cin>>b;
points.insert(point(a,b));
}
//iter=points.begin();
//cout<<(*iter).x<<(*iter).y<<j<<endl;
for (iter[1]=points.begin();iter[1]!=points.end();iter[1]=points.erase(iter[1]))
{//ddd
for (iter[0]=iter[1];iter[0]!=points.end();iter[0]++)
{
//x1-x2=y1-y2并且 (x1,y2)和(x2,y1)在集合中,则正方形数+1
if( (*iter[0]).x - (*iter[1]).x !=0&& ( (*iter[0]).x - (*iter[1]).x)==abs((*iter[0]).y - (*iter[1]).y)
&& (!(points.find(point((*iter[1]).x,(*iter[0]).y))==points.end()))&&
(!(points.find(point((*iter[0]).x,(*iter[1]).y))==points.end()) ))
winN++;
}
}//ddd
cout<<winN<<endl;
return 0;
}