킬봇

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

킬봇은 살인 로봇으로 가득한 방에서 살아남는 턴제 게임이다. 누가 로봇을 만들었는지, 왜 눈앞의 모든 것을 부수도록 명령했는지는 아무도 모른다. 확실한 것은 제작자가 품질보다 수량을 택했다는 사실뿐이라, 로봇은 수가 아주 많고 아주 멍청하다.

판은 직사각형 격자이고, 각 칸에는 다음 중 하나가 놓인다.

  • 영웅 (@): 로봇 무리와 한 방에 갇힌 불운한 주인공이다. 원래 게임에서는 플레이어가 영웅을 움직이지만, 이 문제의 영웅은 한 칸도 움직이지 않는다. 대신 자기 칸으로 들어오는 로봇과 고속봇을 모두 부순다.
  • 로봇 (+): 영웅을 깔아뭉개려는 기계 깡패다. 로봇 3원칙은 들어 본 적도 없고, 그것을 설명하려는 상대까지 부숴 버릴 것이다. 로봇은 매 턴 영웅 쪽으로 한 칸 이동한다. 영웅과 같은 행이나 같은 열에 있으면 영웅 쪽으로 곧장 한 칸 가고, 아니면 영웅에 더 가까워지는 대각선 방향으로 한 칸 간다. 식으로 쓰면, 영웅이 rhr_hchc_h열에 있을 때 rrcc열의 로봇은 r+s(rhr)r + s(r_h - r)c+s(chc)c + s(c_h - c)열로 간다. 여기서 s(x)s(x)x>0x > 0이면 11, x<0x < 0이면 1-1, x=0x = 0이면 00이다.
  • 고속봇 (#): 기본 로봇을 빠르게 개조한 것이다. 이동 규칙은 로봇과 같지만, 로봇이 한 칸 갈 때 두 칸을 간다. 늘어난 속도만큼 지능이 붙지는 않아서, 보통은 자기 자신을 두 배로 빨리 부수는 데 그친다.
  • 고철 더미 (*): 로봇이나 고속봇이 둘 이상 같은 칸에 들어가면 모두 부서지고 그 자리에 고철 더미가 남는다. 로봇과 고속봇은 앞을 막은 고철 더미를 무시하고 그대로 돌진하다가 부서진다. 고철 더미는 움직이지도 않고 사라지지도 않는다.

한 턴은 두 단계로 진행된다.

  1. 모든 로봇과 고속봇이 동시에 한 칸 이동한다.
  2. 살아남은 고속봇이 동시에 한 칸 더 이동하고, 로봇은 제자리에 머문다.

각 단계의 이동이 모두 끝난 뒤에 칸을 정리한다.

  • 영웅의 칸으로 들어간 것은 영웅에게 부서진다.
  • 고철 더미가 있는 칸으로 들어간 것은 부서지고, 고철 더미는 그대로 남는다.
  • 같은 칸에 둘 이상이 들어갔으면 모두 부서지고 그 칸에 고철 더미가 생긴다. 두 번째 단계에서는 그 칸에 서 있던 로봇도 함께 부서진다.

모두 동시에 움직이므로, 같은 단계에 다른 유닛이 빠져나가는 칸으로 들어가는 것은 아무 일도 아니다.

로봇과 고속봇이 하나도 남지 않을 때까지 턴을 반복한다. 영웅이 부순 로봇과 고속봇의 수를 세어라.

아래 그림은 어떤 게임의 첫 턴이다. 영웅은 E5에 서 있고, 고철 더미는 D1, F3, G5, B7에 있다.

   A B C D E F G H
1  . . . * . . . .
2  . . . . . . . #
3  . . . . . * . .
4  . . . . + . . .
5  . + . . @ . * .
6  . . . . . . . +
7  . * . . . + . .
8  . + . . . . # .

첫 번째 단계에서 B5의 로봇은 영웅과 같은 행이므로 오른쪽 C5로 가고, E4의 로봇은 영웅과 같은 열이므로 아래쪽 E5로 들어가 영웅에게 부서진다. B8의 로봇은 오른쪽 위 C7로 간다. H6의 로봇은 왼쪽 위 G5로 갔다가 고철 더미에 부딪혀 부서진다. F7의 로봇은 E6으로 가고, 같은 단계에 G8의 고속봇이 F7로 들어오므로 둘은 겹치지 않는다. 두 번째 단계에서는 로봇이 제자리에 있고 F7의 고속봇이 E6으로 가서 기다리던 로봇과 충돌한다. 둘 다 부서지고 E6에는 고철 더미가 남는다.

입력

입력에는 여러 개의 테스트 케이스가 들어 있고, 테스트 케이스 하나가 격자 하나를 나타낸다. 격자는 길이가 같은 여러 줄로 주어진다. 한 줄이 격자의 한 행이고, 줄의 한 문자가 한 칸이다. 빈 칸은 .이고, 나머지 칸은 위에서 설명한 문자를 쓴다. 각 격자 다음에는 $ 문자 하나만 있는 줄이 온다. 격자마다 @가 놓인 칸은 정확히 하나다. 격자의 각 변은 1칸 이상 1000칸 이하이다.

출력

각 테스트 케이스마다 게임이 끝났을 때, 즉 로봇과 고속봇이 모두 부서졌을 때 영웅이 부순 로봇과 고속봇의 수를 한 줄에 출력한다.