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 queue
  import copy
  
  
  def solve(h, w, m, t):
      d0 = [1, 0, -1, 0]
      d1 = [0, -1, 0, 1]
      c = 0
      for i in range(1, h + 1):
          for j in range(1, w + 1):
              if m[i][j] == "#" and t[i][j] == "#":
                  bl, wh = 0, 0
                  q = queue.Queue()
                  q.put([i, j])
                  while not q.empty():
                      cur = q.get()
                      for d in range(4):
                          nci, ncj = cur[0] + d0[d], cur[1] + d1[d]
                          if t[nci][ncj] == "#":
                              t[nci] = t[nci][:ncj] + "*" + t[nci][(ncj + 1) :]
                              if m[nci][ncj] == "#":
                                  bl += 1
                              else:
                                  wh += 1
                              q.put([nci, ncj])
                  c += bl * wh
              elif m[i][j] == "#" and t[i][j] == ".":
                  bl, wh = 0, 0
                  q = queue.Queue()
                  q.put([i, j])
                  while not q.empty():
                      cur = q.get()
                      for d in range(4):
                          nci, ncj = cur[0] + d0[d], cur[1] + d1[d]
                          if t[nci][ncj] == ".":
                              t[nci] = t[nci][:ncj] + "*" + t[nci][(ncj + 1) :]
                              if m[nci][ncj] == ".":
                                  bl += 1
                              else:
                                  wh += 1
                              q.put([nci, ncj])
                  c += bl * wh
      return c
  
  
  h, w = map(int, input().split())
  m = ["*" * (w + 2)]
  for i in range(h):
      m.append("*" + input() + "*")
  m.append("*" * (w + 2))
  print(m)
  mm = copy.deepcopy(m)
  for i in range(1, h + 1):
      for j in range(1, w + 1):
          if (i + j) % 2 == 1:
              if m[i][j] == "#":
                  mm[i] = mm[i][:j] + "." + mm[i][(j + 1) :]
              else:
                  mm[i] = mm[i][:j] + "#" + mm[i][(j + 1) :]
  print(solve(h, w, m, mm))
  
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"}]