N = int(input())


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[a] = parent[b]
        return True 
    return False

comps = 0
xmap = {}
ymap = {}

for i in range(N):
    (x,y) = input().split(" ")
    if x in xmap and y in ymap:
        if union(ymap[y], xmap[x]):
            comps -= 1
        union(i,xmap[x])
    elif x in xmap:
        union(i,xmap[x])
        ymap[y] = xmap[x]
    elif y in ymap:
        union(i,ymap[y])
        xmap[x] = ymap[y]
    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)

