There are N dots in a two-dimensional plane. The coordinates of the i-th dot are (x_i, y_i).

We will repeat the following operation as long as possible:

* Choose four integers a, b, c, d (a \neq c, b \neq d) such that there are dots at exactly three of the positions (a, b), (a, d), (c, b) and (c, d), and add a dot at the remaining position.



We can prove that we can only do this operation a finite number of times. Find the maximum number of times we can do the operation.

Constraints

* 1 \leq N \leq 10^5
* 1 \leq x_i, y_i \leq 10^5
* If i \neq j, x_i \neq x_j or y_i \neq y_j.
* All values in input are integers.

Input

Input is given from Standard Input in the following format:


N
x_1 y_1
:
x_N y_N


Output

Print the maximum number of times we can do the operation.

Examples

Input

3
1 1
5 1
5 5


Output

1


Input

2
10 10
20 20


Output

0


Input

9
1 1
2 1
3 1
4 1
5 1
1 2
1 3
1 4
1 5


Output

16
#include <cstdio>
#define ll long long
using namespace std;

inline int read() {
    int x = 0, f = 1; char ch = getchar();
    while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar(); }
    while (ch >= '0' && ch <= '9') { x = x * 10 + ch - 48; ch = getchar(); }
    return x * f;
}

const int N = 1e5;
int x[N * 2 + 10], y[N * 2 + 10], fa[N * 2 + 10];

int getfa(int u) {
	return u == fa[u] ? u : fa[u] = getfa(fa[u]);
}

void unit(int u, int v) {
	u = getfa(u);
	v = getfa(v);
	if (u == v) return;
	x[u] += x[v];
	y[u] += y[v];
	x[v] = y[v] = 0;
	fa[v] = u;
}

int main() {
	for (int i = 1; i <= 2 * N; i++) {
		fa[i] = i;
		if (i <= N) x[i] = 1;
		if (i > N) y[i] = 1;
	}
	int n = read();
	int t = n;
	while (n--) {
		int u = read(), v = read();
		v += N;
		unit(u, v);
	}
	ll ans = 0;
	for (int i = 1; i <= N; i++) ans += 1LL * x[i] * y[i];
	printf("%lld\n", ans - t);
	return 0;
}