점토를 위한 물처럼

시간 제한1초메모리 제한128 MB

문제

사람들은 이상한 일을 벌이곤 합니다. 최근 몇몇 사람들이 스틱타이트(Stick-Tite) 블록("딱 붙는다니까요!")으로 구조물을 만들기 시작했습니다. 이 블록들을 두 장의 아크릴판 사이에 끼워 넣고 물에 담그는 것이죠.

네, 저희도 이유는 잘 모르겠습니다.

스틱타이트 블록은 한 변이 1인치인 정육면체로, 공기는 통과시키지만 물은 통과시키지 않는 재질로 되어 있습니다. 제대로 정렬하면 서로 잘 달라붙어서 픽셀 그림 같은 구조물을 손쉽게 만들 수 있습니다. 아크릴판에도 (지나치지 않을 정도로) 잘 붙습니다.

구조물을 물속에 담그고 흔들면, 구조물 내부에 완전히 밀폐되어 갇힌 공간을 제외한 모든 빈 공간이 물로 채워집니다. 물은 상하좌우 또는 대각선으로 인접한 두 빈 칸 사이를 자유롭게 흐를 수 있습니다.

X..
.X.
..X

위 구조물에서는 오른쪽 위 영역과 왼쪽 아래 영역 사이로 물이 흐를 수 있습니다.

X..
XXX
...

위 구조물에서는 오른쪽 위 영역과 왼쪽 아래 영역 사이로 물이 흐를 수 없습니다.

첫 번째 구조물에서는 대각선 틈을 통해 물이 위쪽 영역까지 도달합니다. 두 번째에서는 다른 곳으로 연결되지 않는 한 두 영역이 서로 분리되어 있습니다.

담그고 흔든 뒤, 구조물을 물에서 곧장 위로 꺼냅니다. 그러면 바닥이나 옆면의 구멍으로 물이 빠져나가며, 모든 내부 방과 통로에서 수위가 방 벽에 난 구멍의 아래쪽 높이와 같아질 때까지 물이 빠집니다. 또한 정수압 때문에, 물이 빠진 뒤에도 서로 이어져 있는 웅덩이의 수위는 그 물이 빠져나갈 수 있는 가장 낮은 구멍의 아래쪽보다 높아질 수 없습니다.

XXXXXXXXXXX
XX......XXX
XXX.XXXXX.X
X...X.XXXXX
X.X.X...X.X
X.X~X~X.X.X
X.X~~~X...X
X.XXXXXXX.X

위 예시에서 물결표(~)는 가운데 웅덩이가 담을 수 있는 최대 물의 양을 나타냅니다. 왼쪽 구멍이 오른쪽 구멍보다 한 칸 높지만, 웅덩이 전체의 수위는 더 낮은 (오른쪽) 구멍보다 높아질 수 없습니다. 물이 빠지면서 하나의 웅덩이가 여러 개의 작고 독립적인 웅덩이로 나뉠 수 있으며, 나뉜 웅덩이들은 각자 독립적으로 물이 빠집니다.

XXXXXXXXXXX
X......X..X
X.XXXX~X..X
X.X~~~~X...
X~XXXXXX~~X
X~~~~~~X~~X
X~~~~~~~~~X
XXXXXXXXXXX

구조물은 어느 방향을 위로 하여 담그느냐에 따라 담기는 물의 양이 달라집니다. 구조물을 이루는 블록이 주어질 때, 네 변을 각각 위로 향하게 하여 담갔을 때 담을 수 있는 물의 양을 구하세요. (담글 때마다 구조물은 완전히 말린 상태에서 시작합니다.)

입력

첫째 줄에 데이터 집합의 개수를 나타내는 정수 $N$ ($1 \le N \le 100$)이 주어집니다. 각 데이터 집합은 다음과 같이 구성됩니다.

  • 한 줄에 뒤따르는 구조물의 높이와 너비를 나타내는 두 정수 $H$와 $W$ ($1 \le H, W \le 40$)가 주어집니다.
  • 이어서 $H$개의 줄에 각각 $W$개의 문자가 주어지며, X는 스틱타이트 블록을, .는 빈 공간을 나타냅니다.

출력

각 데이터 집합마다, 구조물의 네 변이 각각 위를 향하도록 네 번 담갔다가 물을 뺐을 때 담을 수 있는 물의 양(세제곱인치)을 큰 값부터 작은 값 순으로 정렬하여, 공백으로 구분한 네 정수를 한 줄에 출력하세요.