페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#10340

세균 전술 30s 1024MB

문제

베카(Becca)와 테리(Terry)는 친근한 경쟁 관계인 미생물학자들이다. 연구에서 잠시 쉬고 싶을 때면 둘이 함께 게임을 하곤 한다. 이 게임은 RC열의 단위 칸 행렬에서 진행된다. 처음에 각 칸은 비어 있거나, 방사성 물질을 포함하고 있다.

각 플레이어의 차례에, 행렬에 빈 칸이 하나도 없다면 그 플레이어가 게임에서 진다. 그렇지 않으면 빈 칸 하나를 골라 그 칸에 박테리아 집락을 놓는다. 박테리아 집락에는 두 종류가 있다: H("horizontal")와 V("vertical").

  • H형 집락을 빈 칸에 놓으면, 그 칸을 차지하여(비어 있지 않게 만들고), 또한 바로 서쪽(있다면)과 바로 동쪽(있다면) 칸으로 퍼지려고 시도한다.
  • V형 집락을 빈 칸에 놓으면, 그 칸을 차지하여(비어 있지 않게 만들고), 또한 바로 남쪽(있다면)과 바로 북쪽(있다면) 칸으로 퍼지려고 시도한다.

어떤 집락(어느 타입이든)이 어떤 칸으로 퍼지려고 시도할 때마다:

  • 그 칸에 방사성 물질이 있다면, 집락이 돌연변이를 일으키고 그 집락을 놓은 플레이어는 게임에서 진다.
  • 그 칸이 비어 있다면, 집락이 그 칸을 차지해(비어 있지 않게 만들고) 위 규칙이 다시 발동한다(즉, 집락은 더 멀리 퍼지려고 시도한다).
  • 그 칸에 이미 박테리아(어느 타입이든)가 있다면, 그 칸으로는 퍼지지 않는다.

어떤 플레이어가 할 수 있는 모든 수가 곧바로 패배로 이어질 수도 있으므로, 그 플레이어는 이미 운명이 정해져 있을 수 있다. 게임이 어떻게 진행되는지에 대한 예시는 아래의 샘플 설명을 참고하라.

베카가 먼저 수를 두고, 이후 두 플레이어는 번갈아 수를 두다가 한 명이 지면 게임이 끝난다. 두 플레이어가 최적으로 플레이한다면 누가 이길까? 그리고 베카가 이긴다면, 베카가 둘 수 있는 서로 다른 승리 시작 수는 몇 개인가? (두 시작 수는 사용한 칸이 다르거나, 집락의 종류가 다르거나, 혹은 둘 다 다를 때에만 서로 다르다고 한다.)


입력

입력의 첫 줄에는 테스트 케이스 수 T가 주어진다. T개의 테스트 케이스가 이어진다. 각 테스트 케이스는 먼저 정수 R, C가 주어진 한 줄로 시작하며, 이는 행렬의 행/열의 개수이다. 그 다음 R줄이 이어지며, 각 줄은 길이 C의 문자열이다. i번째 줄의 j번째 문자는 행렬의 i번째 행 j번째 열을 나타낸다. 각 문자는 빈 칸을 의미하는 . 또는 방사성 물질이 있는 칸을 의미하는 # 중 하나이다.


출력

각 테스트 케이스마다 Case #x: y 형식의 한 줄을 출력하라. 여기서 x는 (1부터 시작하는) 테스트 케이스 번호이고, y는 정수이다. 베카가 이기지 못한다면 0을 출력하고, 베카가 이긴다면 위에서 설명한 서로 다른 승리 시작 수의 개수를 출력하라.


예제

5
2 2
..
.#
4 4
.#..
..#.
#...
...#
3 4
#.##
....
#.##
1 1
.
1 2
##
Case #1: 0
Case #2: 0
Case #3: 7
Case #4: 2
Case #5: 0
샘플 케이스 #1에서 Becca는 남서쪽 빈 칸에 H 콜로니를 두거나 북동쪽 빈 칸에 V 콜로니를 둘 수 없다. 그렇게 하면 방사성 칸으로 퍼져 Becca가 패한다. 즉시 지지 않는 전략은 두 가지뿐이다: 북서쪽 또는 북동쪽 빈 칸에 H 콜로니를 둔다. 콜로니는 나머지 한 칸으로도 퍼진다. 북서쪽 또는 남서쪽 빈 칸에 V 콜로니를 둔다. 콜로니는 나머지 한 칸으로도 퍼진다. Becca가 전략 1을 택하면 Terry는 남서쪽 빈 칸에 V 콜로니를 둘 수 있다. Becca가 전략 2를 택하면 Terry는 북동쪽 빈 칸에 H 콜로니를 둘 수 있다. 어느 쪽이든 Becca는 다음 턴에 둘 빈 칸이 없어 패배하고, Terry가 이긴다. 샘플 케이스 #2에서는 Becca의 어떤 첫 수라도 돌연변이를 일으킨다. 샘플 케이스 #3에서는 Becca의 가능한 첫 수 5개가 돌연변이를 일으키지만, 나머지 7개는 이긴다. 그녀는 두 번째 행의 어떤 칸에도 H 콜로니를 둘 수 있고, 또는 두 번째 열의 어떤 칸에도 V 콜로니를 둘 수 있다. 어느 경우든 1칸 또는 2칸짜리 비연결 집합 두 개가 남는다. 각 집합에서는 한 종류의 콜로니만 놓을 수 있고, 그것을 놓으면 그 집합의 모든 빈 칸이 소비된다. 따라서 Terry가 어느 집합을 먹든 Becca가 다른 집합을 먹어 Terry의 수를 없애 승리한다. 샘플 케이스 #4에서는 Becca의 서로 다른 두 가지 첫 수가 모두 승리한다. 샘플 케이스 #5에서는 Becca가 둘 수 있는 첫 수가 없다.

출처

GCJ 2019r1c C

로그인해야 코드를 작성할 수 있어요.