배틀십

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

문제

배틀십은 10×10 격자에 배 열 척을 숨겨 두고 푸는 종이 퍼즐이다. 배는 네 칸짜리 한 척, 세 칸짜리 두 척, 두 칸짜리 세 척, 한 칸짜리 네 척으로 모두 열 척이다. 배는 가로나 세로로 놓이고, 서로 겹치지 않으며, 모서리끼리도 닿지 않는다. 단서는 격자 옆에 적힌 행 합과 열 합뿐이고, 각 숫자는 그 행이나 열에서 배가 덮은 칸의 개수다.

퍼즐을 만들 때는 주어진 행 합과 열 합으로 답이 하나만 나오게 해야 한다. 합만으로 답이 하나로 정해질 때도 있다. 그렇지 않으면 출제자가 칸 몇 개의 내용을 미리 공개해서 나머지 답을 모두 배제한다.

공개하는 칸은 일곱 종류 중 하나다. 오른쪽 문자는 출력에 쓴다.

종류문자
w
배의 가운데X
가로 배의 왼쪽 끝<
세로 배의 위쪽 끝^
가로 배의 오른쪽 끝>
세로 배의 아래쪽 끝v
한 칸짜리 배O

마지막 문자는 숫자 0이 아니라 대문자 O다. X는 대문자이고 wv는 소문자다. 이 표의 순서는 출력에서 종류끼리 순위를 매길 때도 그대로 쓴다.

행 합과 열 합이 주어지면, 답이 하나만 남도록 공개해야 하는 칸의 최소 개수를 구한다. 그 개수가 2보다 크면 퍼즐이 너무 모호하다고 보고 버린다.

입력

첫 줄에 테스트 케이스 개수 n이 주어진다. 각 테스트 케이스는 두 줄이다. 첫 줄에 행 합 10개, 둘째 줄에 열 합 10개가 공백으로 구분되어 주어진다. 행 번호는 위에서 아래로 1부터 10, 열 번호는 왼쪽에서 오른쪽으로 1부터 10이다. 모든 테스트 케이스에는 답이 적어도 하나 있고, 답의 개수는 12000을 넘지 않는다.

출력

테스트 케이스마다 한 줄씩 출력한다. 줄은 Case, 공백, 케이스 번호, 콜론, 공백으로 시작한다. 이어서 합이 허용하는 답의 개수를 출력한다. 그다음 공백을 하나 두고, 공개해야 하는 칸의 최소 개수가 2보다 크면 too ambiguous를, 그렇지 않으면 그 최소 개수를 출력한다.

최소 개수가 1이나 2이면 그 뒤에 공개할 칸을 이어서 출력한다. 칸마다 앞에 공백을 하나 두고, 괄호 안에 행 번호와 열 번호를 쉼표로 이어 쓴 다음 =와 종류 문자를 붙인다. 최소 개수가 0이면 줄은 거기서 끝난다.

칸의 순위는 이렇게 정한다. 행 번호가 작을수록 앞서고, 행이 같으면 열 번호가 작을수록 앞서며, 같은 칸이면 위 표에서 먼저 나온 종류가 앞선다. 칸이 하나면 조건을 만족하는 칸 중 순위가 가장 높은 칸을 출력한다. 칸이 둘이면 두 칸을 순위 순서대로 출력하되, 조건을 만족하는 모든 쌍 중에서 첫 번째 칸의 순위가 가장 높은 쌍을 고르고, 그런 쌍이 여럿이면 두 번째 칸의 순위로 가린다.