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: from collections import deque, defaultdict
  import sys
  from collections import defaultdict
  
  input = sys.stdin.readline
  
  H, W = map(int, input().split())
  C = [list(input()) for i in range(H)]
  INF = 10**9
  go = [[1, 0], [0, 1], [-1, 0], [0, -1]]
  que = deque()
  ans = -1
  
  mass = ["#", "."]
  groups = [[-1 for _ in range(W)] for _ in range(H)]
  group_num = -1
  for sx in range(W):
      for sy in range(H):  # スタート地点のループ
          if C[sy][sx] == "#" and groups[sy][sx] == -1:
              group_num += 1
              que.append((sy, sx))
              groups[sy][sx] = group_num
              while que:  # 行けるだけいく
                  y, x = que.popleft()
                  for temp in go:
                      gx, gy = temp
                      nx = x + gx
                      ny = y + gy
                      should = abs(sx - nx) + abs(sy - ny)  # 奇数→
                      should %= 2
                      if 0 <= nx < W and 0 <= ny < H and C[ny][nx] == mass[should]:
                          if (
                              groups[ny][nx] == -1
                          ):  # ここの更新にminはいらない(幅優先なので自明に最短距離を進む)
                              groups[ny][nx] = group_num
                              que.append((ny, nx))
  ans = 0
  di_sharp = defaultdict(lambda: 0)
  di_dot = defaultdict(lambda: 0)
  ma = -1
  for sx in range(W):
      for sy in range(H):
          if groups[sy][sx] >= 0:
              color = groups[sy][sx]
              ma = max(ma, color)
              if C[sy][sx] == "#":
                  di_sharp[color] += 1
              else:
                  di_dot[color] += 1
  
  for i in range(ma + 1):
      ans += di_dot[i] * di_sharp[i]
  
  print(ans)
  
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"}]