십자말풀이 번호 매기기

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

문제

로고파일 교수는 동네 신문에 실릴 십자말풀이를 만든다. 만드는 순서가 조금 특이하다. 빈 격자에 단어부터 적어 넣고, 그다음에 남는 칸을 검은 칸으로 채운다. 여기까지는 쉽다. 격자에 번호를 매기고 열쇠 양식을 만드는 단계에서 늘 막힌다.

완성된 십자말풀이가 주어지면 열쇠를 적어 넣을 빈 양식을 출력하자. 양식에는 단어마다 번호와 글자 수를 적는다.

로고파일 교수는 언제나 제대로 된 십자말풀이를 만든다. 가로 단어와 세로 단어가 각각 하나 이상 있고, 가로 단어와 세로 단어가 함께 쓰는 칸이 하나 이상 있으며, 모든 단어는 세 글자 이상이다.

번호는 일반적인 규칙대로 매긴다. 어떤 칸의 왼쪽이 검은 칸이거나 격자 바깥이고 오른쪽이 글자 칸이면, 그 칸에서 가로 단어가 시작한다. 어떤 칸의 위쪽이 검은 칸이거나 격자 바깥이고 아래쪽이 글자 칸이면, 그 칸에서 세로 단어가 시작한다. 격자를 위에서 아래로, 한 행 안에서는 왼쪽에서 오른쪽으로 훑으면서 가로 단어나 세로 단어가 시작하는 칸에 1번부터 차례로 번호를 붙인다. 어느 쪽도 시작하지 않는 글자 칸에는 번호를 붙이지 않는다.

입력

입력은 십자말풀이 여러 개로 이어진다. 각 십자말풀이의 첫 줄에는 행의 수 rr과 열의 수 cc가 주어진다 (3r,c203 \le r, c \le 20). 다음 rr개의 줄에는 각각 cc개의 문자가 주어진다. 각 문자는 알파벳 대문자이거나, 검은 칸을 뜻하는 @다. 0 0으로 이루어진 줄이 나오면 입력이 끝난다.

출력

십자말풀이마다 먼저 Crossword puzzle <n>을 출력한다. <n>은 십자말풀이를 센 값이고 1부터 시작한다. 다음 줄에 Across를 출력하고 가로 단어를 한 줄에 하나씩 출력한다. 그 뒤에 Down을 출력하고 세로 단어를 한 줄에 하나씩 출력한다. 두 목록 모두 단어 번호가 커지는 순서로 출력한다.

단어 한 줄은 앞에 공백 없이 단어 번호, 마침표, 공백 두 개, 여는 괄호, 앞에 공백 없이 단어의 글자 수, 닫는 괄호 순이다. 번호가 1이고 다섯 글자인 단어는 1. (5)로 출력한다.

이어지는 두 십자말풀이 사이에는 빈 줄을 하나 넣는다.