#include <bits/stdc++.h>

using namespace std;

unordered_map<int, unordered_map<int, int>> OnVert, OnHorz;
int X[500000], Y[500000];

int Count(int x, int y, unordered_map<int, int> &HorzSet, unordered_map<int, int> &VertSet) {
    int t = 0;
    for(auto p : HorzSet) {
        int val = p.first, cnt = p.second;

        if(VertSet.count(x - val + y)) t += cnt * VertSet[x - val + y];
        if(VertSet.count(val - x + y)) t += cnt * VertSet[val - x + y];
    }
    return t;
}

void Read(int &a) {
    char c;
    for(c = getchar(); !isdigit(c); c = getchar());
    for(a = 0; isdigit(c); c = getchar())
        a = (a << 1) + (a << 3) + c - '0';
}

int main() {

    int n;
    cin >> n;

    for(int i = 1; i <= n; ++i) {
        Read(X[i]); Read(Y[i]);
        OnVert[X[i]][Y[i]] ++;
        OnHorz[Y[i]][X[i]] ++;
    }

    long long total = 0;

    for (int i = 1; i <= n; ++i) {
        int x = X[i], y = Y[i];
        auto &VertSet = OnVert[x], &HorzSet = OnHorz[y];

        if(VertSet.size() > HorzSet.size())
            total += Count(x, y, HorzSet, VertSet);
        else
            total += Count(y, x, VertSet, HorzSet);
    }

    cout << total - 2 * n;

    return 0;
}