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: while True:
      W, H = [int(x) for x in input().split()]
      if W == 0 and H == 0:
          exit()
      tiles = []
      X = 0
      Y = 0
      for i in range(H):
          tiles.append(input())
          if "@" in tiles[i]:
              Y = i
              X = tiles[i].index("@")
      d = [[9999 for j in range(H * W)] for i in range(H * W)]
      for i in range(H * W):
          d[i][i] = 0
      for i in range(H):
          for j in range(W):
              if j > 0:
                  if tiles[i][j] in ".@" and tiles[i][j - 1] in ".@":
                      d[W * i + j][W * i + j - 1] = 1
              if j < W - 1:
                  if tiles[i][j] in ".@" and tiles[i][j + 1] in ".@":
                      d[W * i + j][W * i + j + 1] = 1
              if i > 0:
                  if tiles[i][j] in ".@" and tiles[i - 1][j] in ".@":
                      d[W * i + j][W * i + j - W] = 1
              if j < H - 1:
                  if tiles[i][j] in ".@" and tiles[i + 1][j] in ".@":
                      d[W * i + j][W * i + j + W] = 1
      for k in range(H * W):
          for i in range(H * W):
              for j in range(H * W):
                  if d[i][j] > d[i][k] + d[k][j]:
                      d[i][j] = d[i][k] + d[k][j]
      cnt = 0
      for i in range(H * W):
          if d[X + Y * H][i] < 9999:
              cnt += 1
      print(cnt)
  
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"}]