#include <stdio. h>
struct
point {
int
x, y, id;
};
int
equals(
struct
point a,
struct
point b) {
return
a.x == b.x && a.y == b.y;
}
int
cmp(
struct
point a,
struct
point b) {
return
①;
}
void
sort(
struct
point A[],
int
n) {
for
(
int
i = 0; i < n; i++)
for
(
int
j = 1; j < n; j++)
if
(cmp(A[j], A[j - 1])) {
struct
point t = A[j];
A[j] = A[j - 1];
A[j - 1] = t;
}
}
int
unique(
struct
point A[],
int
n) {
int
t = 0;
for
(
int
i = 0; i < n; i++)
if
(②)
A[t++] = A[i];
return
t;
}
int
binary_search(
struct
point А[],
int
n,
int
x,
int
y) {
struct
point p;
p.x = x;
р.y = y;
p.id = n;
int
a = 0,b = n - 1;
while
(a < b) {
int
mid = ③;
if
(④)
a = mid + 1;
else
b = mid;
}
return
equals(A[a], р);
}
#define MAXN 1000
struct
point A[MAXN];
int
main() {
int
n;
scanf
(
"%d"
, &n);
for
(
int
i = 0; i < n; i++) {
scanf
(
"%d %d"
, &A[i].x, &A[i].y);
A[i].id = i;
}
sort(A, n);
n = unique(A, n);
int
ans = 0;
for
(
int
i = 0; i < n; i++)
for
(
int
j = 0; j < n; j++)
if
(⑤ && binary_search(A, n, A[i].x, A[j].y) && binary_search(A, n, A[j].x, A[i].y)) {
ans++;
}
printf
(
"%d\n"
, ans);
return
0;
}