output_description: Print the maximum number of times we can do the operation.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      x_1 y_1
      :
      x_N y_N
attempt: def f_must_be_rectangular(N, Positions):
      # 参考: https://atcoder.jp/contests/abc131/submissions/6086451
      # x軸, y軸をまとめて1つのリストで扱う
      import sys
  
      sys.setrecursionlimit(10**6)
  
      vertex_maxsize = 10**5
      target = [[] for _ in range(2 * vertex_maxsize)]
      is_visited = [False] * (2 * vertex_maxsize)
      for x, y in Positions:
          y += vertex_maxsize  # 1つのリストで扱う都合上、ずらす
          target[x].append(y)
          target[y].append(x)
  
      def dfs(v):
          if is_visited[v]:
              return
          is_visited[v] = True
          count[v // vertex_maxsize] += 1  # vがx軸とy軸のどっちを指しているか
          for u in target[v]:
              dfs(u)  # 頂点vに接続されている頂点へ向かう
  
      ans = 0
      for i in range(2 * vertex_maxsize):
          if is_visited[i]:
              continue
          count = [0] * 2
          dfs(i)  # 頂点iにつながっている頂点を調べる
          # x座標とy座標のそれぞれについて、ペアにすると矩形が完成する
          # 座標がいくつあるか。その積が解となる
          ans += count[0] * count[1]
      return ans - N  # 最初に与えられた座標の分、引く
  
  
  N = int(input())
  Positions = [[int(i) for i in input().split()] for j in range(N)]
  print(f_must_be_rectangular(N, Positions))
  
problem_description: Statement
  
  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.
samples: [{"input": "3\n    1 1\n    5 1\n    5 5", "output": "1\n    \n\nBy choosing a = 1, b = 1, c = 5, d = 5, we can add a dot at (1, 5). We cannot\ndo the operation any more, so the maximum number of operations is 1.\n\n* * *"}, {"input": "2\n    10 10\n    20 20", "output": "0\n    \n\nThere are only two dots, so we cannot do the operation at all.\n\n* * *"}, {"input": "9\n    1 1\n    2 1\n    3 1\n    4 1\n    5 1\n    1 2\n    1 3\n    1 4\n    1 5", "output": "16\n    \n\nWe can do the operation for all choices of the form a = 1, b = 1, c = i, d = j\n(2 \\leq i,j \\leq 5), and no more. Thus, the maximum number of operations is\n16."}]