#include <cstdio>
#include <algorithm>
#include <bitset>
#include <unordered_set>

using namespace std;

#define MaxN 100100
#define MaxH (1<<21)
int N;
pair<int, int> points[MaxN];
unordered_set<long long> pointSet;
bitset<MaxH> preHash;

int preVal(const pair<int, int> p) {
   return ((unsigned)(p.first ^ p.second)) % MaxH;
}

void insertPoint(pair<int, int> p) {
   long long val = *((long long *)&p);
   preHash[preVal(p)] = true;
   pointSet.insert(val);
}

bool havePoint(pair<int, int> p) {
   if (!preHash[preVal(p)]) {
      return false;
   }
   long long val = *((long long *)&p);
   return pointSet.find(val) != pointSet.end();
}

int main() {
#ifdef WIN32
   freopen("special.in", "rb", stdin);
   freopen("special.out", "wb", stdout);
#endif
   scanf("%d", &N);
   for (int i = 0; i < N; i++) {
      scanf("%d %d", &points[i].first, &points[i].second);
      insertPoint(points[i]);
   }
   sort(points, points + N);
   int sol = 0;
   for (int st = 0, fn = 0; st < N; st = fn) {
      fn = st;
      while (fn < N && points[fn].first == points[st].first) {
         fn++;
      }
      for (int i = st; i < fn; i++) {
         for (int j = i + 1; j < fn; j++) {
            int delta = points[j].second - points[i].second;
            sol += havePoint(make_pair(points[i].first - delta, points[i].second));
            sol += havePoint(make_pair(points[i].first + delta, points[i].second));
            sol += havePoint(make_pair(points[j].first - delta, points[j].second));
            sol += havePoint(make_pair(points[j].first + delta, points[j].second));
         }
      }
   }
   printf("%d\n", sol);
}