import sys
lines = sys.stdin.readlines()

n = int(lines[0])
g = [[] for i in range(n)]
coords = []

d_x = dict()
d_y = dict()
for i in range(n):
    x,y = map(int, lines[i+1].split())
    coords.append((x,y))
    if x not in d_x:
        d_x[x] = []
    d_x[x].append(i)

    if y not in d_y:
        d_y[y] = []
    d_y[y].append(i)

num_comps= 0
visited = [False] * n

for idx, coord in enumerate(coords):
    if visited[idx]:
        continue
    visited[idx] = True
    num_comps += 1
    stack = [idx]
    while stack:
        i = stack.pop()
        for j in d_x[coords[i][0]]:
            if not visited[j]:
                stack.append(j)
                visited[j] = True
        d_x[coords[i][0]] = []
        for j in d_y[coords[i][1]]:
            if not visited[j]:
                stack.append(j)
                visited[j] = True
        d_y[coords[i][1]] = []

print(num_comps - 1)
