output_description: Print the answer.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      H W
      S_1
      S_2
      :
      S_H
attempt: import sys
  sys.setrecursionlimit(1000000)
  
  def main():
      h, w = map(int, input().split())
      mp = ["X" * (w + 2)] + ["X" + input() + "X" for _ in range(h)] + ["X" * (w + 2)]
      checked = [[False] * (w + 2) for _ in range(h + 2)]
      vec = ((1, 0), (0, -1), (-1, 0), (0, 1))
  
  
      def search(x, y):
          checked[y][x] = True
          if mp[y][x] == "#":
              b_cnt = 1
              w_cnt = 0
              another = "."
          else:
              b_cnt = 0
              w_cnt = 1
              another = "#"
          for dx, dy in vec:
              nx, ny = x + dx, y + dy
              if not checked[ny[nx] and mp[ny][nx] == another:
                  w_add, b_add = search(nx, ny)
                  w_cnt += w_add
                  b_cnt += b_add
          return w_cnt, b_cnt
  
      ans = 0
      for y in range(1, h + 1):
          for x in range(1, w + 1):
              if not checked[y][x]:
                  w_cnt, b_cnt = search(x, y)
                  ans += w_cnt * b_cnt
  
      print(ans)
  
  main()
problem_description: Statement
  
  There is a grid with H rows and W columns, where each square is painted black
  or white.
  
  You are given H strings S_1, S_2, ..., S_H, each of length W. If the square at
  the i-th row from the top and the j-th column from the left is painted black,
  the j-th character in the string S_i is `#`; if that square is painted white,
  the j-th character in the string S_i is `.`.
  
  Find the number of pairs of a black square c_1 and a white square c_2 that
  satisfy the following condition:
  
    * There is a path from the square c_1 to the square c_2 where we repeatedly move to a vertically or horizontally adjacent square through an alternating sequence of black and white squares: black, white, black, white...
samples: [{"input": "3 3\n    .#.\n    ..#\n    #..", "output": "10\n    \n\nSome of the pairs satisfying the condition are ((1, 2), (3, 3)) and ((3, 1),\n(3, 2)), where (i, j) denotes the square at the i-th row from the top and the\nj-th column from the left.\n\n* * *"}, {"input": "2 4\n    ....\n    ....", "output": "0\n    \n\n* * *"}, {"input": "4 3\n    ###\n    ###\n    ...\n    ###", "output": "6"}]