output_description: For each data set, your program should output a line which contains the number
  of tiles he can reach from the initial tile (including itself).
input_description: The input consists of multiple data sets. A data set starts with a line
  containing two positive integers _W_ and _H_ ; _W_ and _H_ are the numbers of
  tiles in the _x_ \- and _y_ \- directions, respectively. _W_ and _H_ are not
  more than 20.
  
  There are _H_ more lines in the data set, each of which includes _W_
  characters. Each character represents the color of a tile as follows.
  
    * '.' - a black tile 
    * '#' - a red tile 
    * '@' - a man on a black tile(appears exactly once in a data set) 
  
  The end of the input is indicated by a line consisting of two zeros.
attempt: import collections
  
  dx = [-1, 0, 1, 0]
  dy = [0, -1, 0, 1]
  
  
  def movable(dst):
      if dst[0] < 0 or dst[0] > b - 1:
          return False
      elif dst[1] < 0 or dst[1] > a - 1:
          return False
      elif MM[dst[0]][dst[1]] == "#":
          return False
      else:
          return True
  
  
  while True:
      c = 1
      a, b = map(int, input().split())
      if a == 0 and b == 0:
          exit()
      else:
          MM = []
          for i in range(b):
              q = list(input())
              MM.append(q)
              if "@" in q:
                  st = [i, q.index("@")]
  
          D = [[-1 for _ in range(a)] for _ in range(b)]
          D[st[0]][st[1]] = 0  # 始点への距離は 0, 他の距離は-1
          Q = collections.deque()
          Q.append(st)  # 始点
          while len(Q) > 0:
              # print("bfs", Q) # 各ステップでの Q の動作を確認
              cur = Q.popleft()
              for dir in range(4):
                  # curからdstに移動可能かつ、dstが未訪問だったら
                  dst = [cur[0] + dx[dir], cur[1] + dy[dir]]
                  # print(dst)
                  if movable(dst) and D[dst[0]][dst[1]] == -1:
                      D[dst[0]][dst[1]] = D[cur[0]][cur[1]] + 1
                      c += 1
                      Q.append(dst)  # Qにdstを詰める
          print(c)
  
problem_description: B: Red and Black
  
  There is a rectangular room, covered with square tiles. Each tile is colored
  either red or black. A man is standing on a black tile. From a tile, he can
  move to one of four adjacent tiles. But he can't move on red tiles, he can
  move only on black tiles.
  
  Write a program to count the number of black tiles which he can reach by
  repeating the moves described above.
samples: [{"input": "9\n    ....#.\n    .....#\n    ......\n    ......\n    ......\n    ......\n    ......\n    #@...#\n    .#..#.\n    11 9\n    .#.........\n    .#.#######.\n    .#.#.....#.\n    .#.#.###.#.\n    .#.#..@#.#.\n    .#.#####.#.\n    .#.......#.\n    .#########.\n    ...........\n    11 6\n    ..#..#..#..\n    ..#..#..#..\n    ..#..#..###\n    ..#..#..#@.\n    ..#..#..#..\n    ..#..#..#..\n    7 7\n    ..#.#..\n    ..#.#..\n    ###.###\n    ...@...\n    ###.###\n    ..#.#..\n    ..#.#..\n    0 0", "output": "59\n    6\n    13"}]