비밀 문자 해독
시간 제한1초메모리 제한128 MB
행 단위로 주어진 이진 문자열을 행렬에 채운 뒤 시계방향 나선 순서로 읽어 5비트 코드를 복원하고 이를 원래 문자와 공백으로 해독합니다.
문제
보내는 사람은 받는 사람에게 보낼 문장을 숨기기 위해 다음 규칙으로 이진 문자열을 만든다.
먼저 행의 수가 R, 열의 수가 C인 행렬을 정하고, 원래 문장의 각 글자를 숫자로 바꾼다.
- 원래 문장은 알파벳 대문자와 공백으로만 이루어져 있다.
- 공백은
0,A는1,B는2, ...,Z는26으로 바꾼다. - 각 숫자는 5자리 이진수로 표현한다.
이렇게 얻은 비트들을 행렬의 왼쪽 위 칸부터 시계 방향 소용돌이 순서로 채운다. 모든 비트를 넣은 뒤에도 빈 칸이 남으면 나머지 칸은 0으로 채운다. 예를 들어 문장이 "ACM"이고 R=4, C=4라면 A=00001, C=00011, M=01101을 소용돌이 순서로 채우고, 마지막으로 남는 한 칸은 0으로 채운다.
마지막으로 행렬을 행 우선 순서로 읽은 이진 문자열을 보낸다. 위 경우 전달되는 문자열은 0000110100101100이다.
행렬의 크기 R, C와 받은 이진 문자열이 주어졌을 때, 원래 문장을 복원하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다 (1 <= T <= 1,000). 각 테스트 케이스는 한 줄로 주어지며, R, 공백, C, 공백, 받은 메시지로 이루어져 있다.
1 <= R, C <= 21이다. 받은 메시지는 0과 1로만 이루어져 있고, 길이는 항상 R*C이다.
출력
각 테스트 케이스마다 변환되기 전의 원래 문장을 출력한다. 원래 문장이 공백으로 끝난다면, 끝의 공백을 모두 제거한 뒤 출력한다.