#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

ifstream in("special_triangles.in");
ofstream out("special_triangles.out");

const int Sqr = 315;
const int MOD = 31547;
const int CRD = 1000000005;

struct punct
{
    int x;
    int y;
};

bool cmp (punct A, punct B)
{
    return A.x + A.y < B.x + B.y;
}

int Hash (int x, int y, vector<vector<int> >&H)
{
    int rez = 0;
    for (int i = 0; i < H[x].size(); i++)
        if (H[x][i] == y)
            rez++;
    return rez;
}

int solve_diag(vector<int>&A, vector<punct>&v, vector<vector<int> >&H)
{
    int rez = 0;

    for (int i = 0; i < A.size() - 1; i++)
        for (int j = i + 1; j < A.size(); j++)
            rez = rez + Hash((min(v[A[i]].x, v[A[j]].x)) % MOD, min(v[A[i]].y, v[A[j]].y), H)
                      + Hash((max(v[A[i]].x, v[A[j]].x)) % MOD, max(v[A[i]].y, v[A[j]].y), H);
    return rez;
}

int solve_mult(int&S, vector<punct>&v, vector<vector<int> >&H)
{
    int rez = 0;

    for (int i = 0; i < v.size(); i++)
        if (Hash((S - v[i].y) % MOD, v[i].y, H) > 0 && Hash(v[i].x % MOD, S - v[i].x, H) > 0)
            rez++;

    return rez;
}

int solve(vector<punct>&v, vector<vector<int> >&H)
{
    int rez = 0;
    int S = v[0].x + v[0].y;

    vector<int> A;
    A.push_back(0);

    v.push_back({0, 0});
    int Size = v.size();

    for (int i = 1; i < Size; i++)
    {
        if (S == v[i].x + v[i].y && i != Size - 1)
            A.push_back(i);

        else

        {
            if (A.size() <= Sqr)
                rez = rez + solve_diag(A, v, H);
            else
                rez = rez + solve_mult(S, v, H);

            S = v[i].x + v[i].y;
            A.clear();
            A.push_back(i);
        }
    }

    v.pop_back();
    return rez;
}

int main()
{
    int n, rez, maxim_x = 0;
    cin >> n;

    vector<punct> v;
    vector<vector<int> > H(MOD, vector<int>());
    vector<vector<int> > W(MOD, vector<int>());

    for (int i = 1; i <= n; i++)
    {
        int x, y;
        cin >> x >> y;

        x = x + CRD;
        y = y + CRD;
        maxim_x = max(maxim_x, x);

        v.push_back({x, y});
        H[x % MOD].push_back(y);
    }

    sort(v.begin(), v.end(), cmp);

    rez = solve(v, H);

    for (int i = 0; i < v.size(); i++)
    {
        int aux = v[i].x;
        v[i].x = v[i].y;
        v[i].y = maxim_x - aux;
        W[v[i].x % MOD].push_back(v[i].y);
    }

    sort(v.begin(), v.end(), cmp);

    cout << rez + solve(v, W);
    return 0;
}