verticies = []

n_vertex = 0

d_x = dict()
d_y = dict()

coords_to_index = dict()


n = int(input()) 
for i in range(n):
    line = input().split()
    x = int(line[0])
    y = int(line[1])
    coords = (x,y)

    verticies.append(coords)
    #index_to_coords[i] = coords
    coords_to_index[coords] = i

    n_vertex += 1

    if not (x in d_x):
        d_x[x] = []
    if not (y in d_y):
        d_y[y] = []


    d_y[y].append(coords)
    d_x[x].append(coords)
    
    

n_komponent = 0

from collections import deque

visited_all = [False for i in range(n_vertex)] ##if v[i] true then vertex i was visited
n_visited = 0

q = deque()

i = 0


while(n_visited<n_vertex):  #len(visited_all) < n_vertex):
    q = deque()



    ## get correct i:
    for j in range(i,n_vertex):
        if not visited_all[j]:
            i = j
            break

    unvisited_vertex = verticies[i]

    visited_all[i] = True
    n_visited+=1
    q.append(unvisited_vertex)

    while len(q) > 0:
        curr = q.popleft()
        c_x = curr[0]
        c_y = curr[1]


        sousedi_x = d_x[c_x].pop()
        sousedi_y = d_y[c_y].pop()

        if sousedi_x == curr and len(d_x[c_x]) > 0:
            sousedi_x = d_x[c_x].pop()
        if sousedi_y == curr and len(d_y[c_y]) > 0:
            sousedi_y = d_y[c_y].pop()
        

        #for s in sousedi_x:
        s_index = coords_to_index[sousedi_x]

        if not visited_all[s_index]: #and s != curr:
            visited_all[s_index] = True
            n_visited+=1

            #tmp = set()
            #tmp.add(s)

            #sousedi_x = sousedi_x.difference(tmp)
            
            #d_x[c_x] = sousedi_x

            q.append(sousedi_x)
            

        
        #for s in sousedi_y:
        s_index = coords_to_index[sousedi_y]

        if not visited_all[s_index]:# and s != curr:
            visited_all[s_index] = True
            n_visited+=1

            #tmp = set()
            #tmp.add(s)

            #sousedi_y = sousedi_y.difference(tmp)
            #d_y[c_y] = sousedi_y

            q.append(sousedi_y)
            

    n_komponent += 1


print(n_komponent-1)
    
