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: def dfs(graph, sx, sy):
      stack = [[sx, sy]]
      visited = []
      cnt = 0
      while stack:
          label = stack.pop(0)
          try:
              g = graph[label[1]][label[0]]
              if (label[0] < 0) or (label[0] > graph[0].__len__() - 1):
                  continue
              if (label[1] < 0) or (label[1] > graph.__len__() - 1):
                  continue
              if g == "#":
                  continue
              if [label[0], label[1]] not in visited:
                  # graph[label[1], label[0]] = '#'
                  cnt += 1
                  visited = [[label[0], label[1]]] + visited
                  stack = [
                      [label[0] + 1, label[1]],
                      [label[0] - 1, label[1]],
                      [label[0], label[1] + 1],
                      [label[0], label[1] - 1],
                  ] + stack
          except IndexError:
              pass
      return cnt
  
  
  if __name__ == "__main__":
      STR = []
      W, H = [int(i) for i in input().split()]
      while W != 0:
          for j in range(H):
              STR.append(list(input()))
              if "@" in STR[j]:
                  sx, sy = STR[j].index("@"), j
          print(dfs(STR, sx, sy))
          STR = []
          W, H = [int(i) for i in input().split()]
  
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"}]