두 사람이 격자에 함선을 숨겨 놓고 상대 함선의 위치를 번갈아 맞히는 놀이가 있다. 이 문제에서 상대는 직사각형 격자 위에 아래 일곱 가지 모양을 하나씩, 모두 일곱 척 배치했다.
xx xx xx x x x
xx xx xx xxx xxx xxx xxxx
모양은 저마다 정확히 네 칸을 덮으므로 함선 일곱 척이 덮는 칸은 모두 28칸이다. 함선은 회전할 수 있지만 뒤집을 수는 없다. 모든 함선은 직사각형 안에 완전히 들어가고 서로 겹치지 않는다. 다른 함선이나 테두리에 닿는 것은 괜찮다.
게임은 이미 진행 중이고 몇 칸은 이미 열려 있다. 지금 알고 있는 내용을 담은 격자가 주어진다. 각 칸은 다음 세 문자 중 하나다.
xo.이제 . 칸을 한 번에 하나씩 열어 나간다. 앞서 연 칸의 결과를 보고 다음에 열 칸을 정해도 된다. 함선이 있는 칸을 열면 명중, 빈 칸을 열면 빗나감이다. 지금 아는 내용과 어긋나지 않는 배치가 어느 것이든, 빗나감을 최대 한 번만 겪으면서 함선 칸 28개를 모두 열 수 있는지 판단하라. 운 좋게 찍어야만 통하는 순서는 인정하지 않는다.
지금 아는 내용만으로 함선 칸 28개가 이미 정해진다면 빗나감은 한 번도 필요 없다. 그렇지 않다면 빗나감을 한 번 쓸 수 있고, 그 결과를 알고 난 뒤에는 실제 배치가 무엇이든 함선 칸이 하나로 정해져야 한다.
입력으로 주어지는 격자에는 언제나 배치가 하나 이상 존재한다.
입력은 여러 개의 상황으로 이루어진다. 각 상황은 격자의 너비 $w$와 높이 $h$를 담은 줄로 시작하며, $2 \le w, h \le 16$이다.
이어지는 $h$개의 줄에는 각각 x, o, . 중 하나로 이루어진 길이 $w$의 문자열이 온다.
상황 사이에는 빈 줄이 들어갈 수 있다. 입력은 $w = 0$이고 $h = 0$인 상황으로 끝나며, 이 상황은 처리하지 않는다.
각 상황마다 먼저 Game #k 줄을 출력한다. $k$는 그 상황이 입력에 나온 순서이고 1부터 센다. 다음 줄에는 빗나감을 최대 한 번만 겪으면서 함선 칸을 모두 열 수 있으면 yes.를, 그렇지 않으면 no.를 출력한다.
이웃한 두 상황 사이에는 빈 줄을 하나 출력한다. 마지막 상황 뒤에는 빈 줄을 출력하지 않는다.