비밀 문자 해독

시간 제한1초메모리 제한128 MB

요약
행 단위로 주어진 이진 문자열을 행렬에 채운 뒤 시계방향 나선 순서로 읽어 5비트 코드를 복원하고 이를 원래 문자와 공백으로 해독합니다.
난이도

보통10점 중 5점

유형
행렬, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

보내는 사람은 받는 사람에게 보낼 문장을 숨기기 위해 다음 규칙으로 이진 문자열을 만든다.

먼저 행의 수가 R, 열의 수가 C인 행렬을 정하고, 원래 문장의 각 글자를 숫자로 바꾼다.

  1. 원래 문장은 알파벳 대문자와 공백으로만 이루어져 있다.
  2. 공백은 0, A는 1, B는 2, ..., Z는 26으로 바꾼다.
  3. 각 숫자는 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이다.

출력

각 테스트 케이스마다 변환되기 전의 원래 문장을 출력한다. 원래 문장이 공백으로 끝난다면, 끝의 공백을 모두 제거한 뒤 출력한다.

예제1

  1. 예제 1

    입력
    4
    4 4 0000110100101100
    5 2 0110000010
    2 6 010000001001
    5 5 0100001000011010110000010
    
    예상 출력
    ACM
    HI
    HI
    HI HO