#include using namespace std; int sol, Konst, N, x[100009], y[100009]; pair < int, int > h[100009]; const int hashMod = 100007; vector < pair < int, int > > hsh[hashMod]; int key (pair < int, int > v) {return (v.first ^ 754237 + v.second ^ 2552875) % hashMod;} void Push (pair < int, int > x) {hsh[key (x)].push_back (x);} bool Qry (pair < int, int > x) {int lin = key (x); for(auto it = hsh[lin].begin (); it != hsh[lin].end (); it ++)if (*it == x) return 1; return 0;} void solve (bool type) { for (int i=1; i<=N; i++) { int j; for (j=i; j<=N; j++) if (h[j].first != h[i].first) break; j --; /// if (j - i + 1 <= Konst) { for (int k=i; k<=j; k++) for (int p=k + 1; p<=j; p++) { int p1 = h[k].second, p2 = h[p].second; sol += Qry ({x[p1], y[p2]}), sol += Qry ({x[p2], y[p1]}); } } else { int diag = h[i].first; if (!type) for (int k=1; k<=N; k++) if (x[k] + y[k] != diag) sol += (Qry ({x[k], diag - x[k]}) & Qry ({diag - y[k], y[k]})); else for (int k=1; k<=N; k++) if (x[k] - y[k] != diag) sol += (Qry ({x[k], x[k] - diag}) & Qry ({diag + y[k], y[k]})); } /// i = j; } } int main () { //freopen ("input", "r", stdin); //freopen ("output", "w", stdout); scanf ("%d", &N); while (Konst * Konst <= N) Konst ++; for (int i=1; i<=N; i++) scanf ("%d %d", &x[i], &y[i]), Push ({x[i], y[i]}), h[i] = make_pair (x[i] + y[i], i); sort (h + 1, h + N + 1), solve (0); for (int i=1; i<=N; i++) h[i] = make_pair (x[i] - y[i], i); sort (h + 1, h + N + 1), solve (1); printf ("%d\n", sol); return 0; }