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

#10347
인터랙티브
채점 보류

데이터센터 듀플렉스 20s 1024MB

문제

Apricot Rules LLC와 Banana Rocks Inc.라는 두 회사가 같은 데이터센터를 공유하고 있다. 데이터센터는 RC열의 행렬이며, 각 칸에는 서버 타워가 하나씩 있다. 각 타워에는 두 회사 중 정확히 한 회사의 지적 재산이 들어 있다.

처음에 두 회사는 서로 다른 회사에 배정된 인접한 두 칸 사이의 변(모서리)에 벽을 세웠다. 이렇게 하면 같은 회사에 속한 칸들이 상하좌우로 인접해 있을 때 서로 연결된 상태로 남게 된다. 또한 어떤 칸 x가 y와 (직접 또는 간접적으로) 연결된 어떤 칸과 연결되어 있다면, x와 y는 연결되어 있다고 정의한다. 이 정의에 따르면 같은 회사에 배정된 두 칸이 서로 연결되어 있지 않을 수도 있는데, 이는 받아들일 수 없었다.

두 회사는 두 칸이 대각선으로 인접할 때에도 직접 연결될 수 있도록, 칸의 꼭짓점을 통과하는 좁은 통로(hallway)를 만들기로 합의했다. (i, j)를 i행 j열의 칸이라고 하자. 어떤 꼭짓점 하나를 통해서는 좁은 통로를 최대 하나만 만들 수 있다. 즉, (i, j)와 (i + 1, j + 1)을 연결하거나, (i + 1, j)와 (i, j + 1)을 연결하거나, 혹은 둘 다 연결하지 않거나 중 하나만 가능하며, 두 쌍을 동시에 연결할 수는 없다. 물론 같은 회사에 배정된 칸들 사이에만 통로를 만들 수 있다.

각 칸이 어느 회사에 배정되었는지에 따라 A 또는 B로 라벨링된 행렬이 주어질 때, 대각선 인접 연결을 적절히 추가하여 모든 A 칸이 서로 연결되고, 모든 B 칸도 서로 연결되게 만드는 방법을 찾아라.


입력

입력의 첫 줄에는 테스트 케이스 수 T가 주어진다. T개의 테스트 케이스가 이어진다. 각 테스트 케이스는 먼저 데이터센터 행렬의 행/열 수를 나타내는 두 정수 R, C가 주어진 한 줄로 시작한다. 그 다음 R줄이 이어지고, 각 줄에는 C개의 문자가 주어진다. i번째 줄의 j번째 문자 Mi,j는 (i, j) 칸의 소유 회사를 나타내는 A 또는 B이다.


출력

각 테스트 케이스마다 먼저 Case #x: y 형식의 한 줄을 출력하라. 여기서 x는 (1부터 시작하는) 테스트 케이스 번호이고, y는 대각선 연결을 적절히 배치하여 A 칸들이 서로 연결되고 B 칸들도 서로 연결되게 만들 수 없다면 IMPOSSIBLE, 가능하다면 POSSIBLE이다. 그리고 POSSIBLE을 출력한 경우에는, 길이가 C - 1인 문자열을 R - 1줄 추가로 출력하라. 이 문자들은 위에서 설명한 대로 유효한 배치를 나타내야 한다. 추가로 출력하는 i번째 줄의 j번째 문자는 (i, j)와 (i + 1, j + 1)을 연결한다면 \, (i + 1, j)와 (i, j + 1)을 연결한다면 /, 둘 다 연결하지 않으면 .이어야 한다.


예제

3
2 2
AB
BA
2 3
AAB
ABB
3 4
BBAA
BABA
BBAA
Case #1: IMPOSSIBLE
Case #2: POSSIBLE
..
Case #3: POSSIBLE
//\
.//
샘플 케이스 #1에서는 A 칸의 쌍과 B 칸의 쌍을 각각 연결해야 하지만, 두 연결 모두 같은 꼭짓점을 가로질러야 하므로 둘 중 하나만 연결할 수 있다. 샘플 케이스 #2에서는 입력에서 이미 요구된 방식으로 연결되어 있으므로 추가 연결이 필요 없다. 불필요한 유효 연결을 추가하는 것은 가능하므로 다른 유효한 답으로 //가 있지만, \.는 잘못이다. 샘플 케이스 #3에서도 여러 해가 있으며, 그중 하나가 표시되어 있다.

출처

GCJ 2019r3 C

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