칸막이 물탱크
시간 제한1초메모리 제한128 MB
격벽으로 막힌 격자 수조의 뚜껑 구멍과 갇힌 공기를 반영해 채울 수 있는 물의 부피를 구합니다.
문제
얇은 직육면체 물탱크가 세워져 있고, 안쪽에는 물의 흐름을 막는 칸막이가 붙어 있다. 물은 탱크 뚜껑에 뚫린 구멍으로 부어 넣지만 칸막이가 물길을 막아서, 탱크 안 여기저기에 공기 주머니가 갇힌 채로 남는다.
아래 그림은 그런 탱크 하나를 옆에서 본 단면과, 앞면을 걷어내고 비스듬히 본 모습이다. 탱크는 가득 찼지만 칸막이 배치 때문에 회색으로 그린 공기 주머니가 두 개 남았다. 그래도 초록색으로 그린 우물에는 물이 들어간다. 사이펀 효과로 물이 양쪽 사이에 놓인 칸막이 윗면을 타고 흘러가 떨어지고, 그 칸막이 위쪽 공기는 그대로 남는다.

탱크와 그 안의 칸, 칸막이는 모두 격자에 맞춰 놓인다. 그림 속 탱크는 너비 5, 높이 4, 두께 1이므로 부피가 20 세제곱 단위이다. 갇힌 공기가 4 세제곱 단위를 차지해서 물은 16 세제곱 단위만 담긴다. 칸막이는 부피를 차지하지 않고 공기는 압축되지 않으므로, 갇힌 공기 주머니는 크기를 그대로 유지한다.
물이 차오르는 동안 물과 공기는 다음 규칙대로 움직인다.
- 물은 뚜껑에 뚫린 구멍마다 들어와서, 열려 있는 칸 경계를 따라 아래로 흐르고 옆으로도 퍼진다.
- 한 칸이 물로 가득 차면 수면이 바로 윗칸 바닥에 닿고, 물은 거기서 옆으로 더 흘러간다. 물이 칸막이를 타고 넘어가 건너편 우물로 떨어지는 것이 이 경우다.
- 공기는 위로 오른다. 열려 있는 경계를 따라 위나 옆으로 움직이다가 물이 위에서 떨어져 들어오는 자리를 만나면 그 물을 거슬러 빠져나간다. 뚜껑에 뚫린 구멍도 그런 자리로 친다.
- 물이 닿고 그 칸의 공기가 빠져나가야만 그 칸이 물로 찬다. 나머지 칸은 바닥으로 물이 지나가더라도 공기로 남는다.
탱크가 가득 찰 때까지 부을 수 있는 물의 양을 구하는 프로그램을 작성하라.
입력
입력은 탱크 여러 개를 차례로 담는다. 각 탱크는 공백 하나로 구분한 정수 두 개, 곧 탱크의 너비 ()와 높이 ()가 적힌 줄로 시작한다. 모든 탱크의 두께는 1이다. 0 0이 적힌 줄이 나오면 입력이 끝난다.
그다음 정확히 개의 줄이 오고, 각 줄은 정확히 개의 문자로 칸막이 위치를 나타낸다. 첫 줄은 실제 탱크 바로 위에 있는 뚜껑 칸 줄이고, 이어지는 개의 줄은 탱크의 각 행을 위에서 아래 순서로 나타낸다.
각 줄의 0번 문자는 탱크의 왼쪽 벽이다. 탱크 행에서는 |이고 뚜껑 줄에서는 .이다. 남은 개의 문자는 왼쪽부터 한 열에 두 문자씩 짝을 이룬다. 짝의 첫 문자는 그 칸 아래가 칸막이로 막혔으면 _, 아래가 열려 있으면 .이다. 둘째 문자는 그 칸 오른쪽이 칸막이로 막혔으면 |, 오른쪽이 열려 있으면 .이다.
뚜껑 줄에서는 짝의 첫 문자만 뜻을 가진다. _는 그 열의 위가 막혔다는 뜻이고, .은 물을 부어 넣는 구멍이다. 뚜껑 줄에 있는 짝의 둘째 문자는 모두 .이다.
탱크 행마다 마지막 문자는 탱크의 오른쪽 벽이라 항상 |이고, 마지막 줄의 칸막이 문자는 탱크 바닥이라 항상 _이다. 문자를 이렇게 고른 덕분에 줄이 모이면 탱크 단면을 그린 아스키 그림이 된다.
출력
탱크마다 한 줄씩 출력한다. 한 줄에는 Tank, 공백 하나, 1부터 세는 탱크 번호, 콜론, 공백 하나, 그 탱크가 담을 수 있는 물의 부피를 차례로 적는다. 번호가 이고 물 세제곱 단위를 담는 탱크는 Tank k: v 형태로 출력한다.