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: if __name__ == "__main__":
      while 1:
          w, h = list(map(int, input().strip().split()))
          if w == h == 0:
              break
          data = []
          data = []
          for _ in range(h):
              data.append(list(input()))
          visited = []
          for i in range(h):
              if "@" in data[i]:
                  stack = [(i, data[i].index("@"))]
          count = 0
          while len(stack) != 0:
              y, x = stack.pop()
              count += 1
              if y - 1 >= 0 and not (y - 1, x) in visited and data[y - 1][x] == ".":
                  visited.append((y - 1, x))
                  stack.append((y - 1, x))
              if x - 1 >= 0 and not (y, x - 1) in visited and data[y][x - 1] == ".":
                  visited.append((y, x - 1))
                  stack.append((y, x - 1))
              if y + 1 < h and not (y + 1, x) in visited and data[y + 1][x] == ".":
                  visited.append((y + 1, x))
                  stack.append((y + 1, x))
              if x + 1 < w and not (y, x + 1) in visited and data[y][x + 1] == ".":
                  visited.append((y, x + 1))
                  stack.append((y, x + 1))
  
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"}]