N = int(input())

xmap = {}
ymap = {}


pairs = []
for i in range(N):
    (x,y) = input().split(" ")
    pairs.append((int(x), int(y)))


parent = [i for i in range(N)]

def find(x):
    if parent[x] == x:
        return x
    parent[x] = find(parent[x])
    return parent[x]

def union(x,y):
    a, b = find(x), find(y)
    if a != b:
        parent[find(x)] = find(y)
        return True 
    return False

comps = 0
for i in range(len(pairs)):
    
    (x,y) = pairs[i]
    if x in xmap and y in ymap:
        #print(x,y,"joins two")
        union(xmap[x], i)
        if union(ymap[y], i):
            comps -= 1
    elif x in xmap:
        union(xmap[x], i)
        ymap[y] = i
    elif y in ymap:
        union(ymap[y], i)
        xmap[x] = i
    else:
        #print("added component at",x,y)
        xmap[x] = i
        ymap[y] = i
        comps += 1

print(len(set([find(i) for i in parent])) - 1)
