프로그래밍 대회의 심사위원 역할은 꽤 고된 일입니다. 심사위원은 어렵고 흥미로운 문제를 준비해야 할 뿐 아니라, 무엇보다 대회 당일까지 그 문제를 비밀로 지켜야 합니다. 심사위원들은 흔히 이메일로 문제를 논의하지만, 이메일은 기밀 자료를 주고받기에 안전한 통로가 아닙니다. 실수로 엉뚱한 사람, 예컨대 자신의 학생이나 심지어 대회 참가자에게 메일이 전송될 수도 있기 때문입니다.
이 문제를 해결하기 위해 심사위원 중 한 명인 Nash V. Ruhdney 교수는 메시지를 기밀로 주고받는 방법을 제안했습니다. 길이가 n인 메시지가 있을 때, 폭이 k인 직사각형에 메시지를 행 우선(왼쪽에서 오른쪽, 위에서 아래) 으로 채워 넣은 다음, 정해진 순서대로 열 단위로 읽어 냅니다. 이때 열을 읽는 순서가 바로 암호화 키입니다.
예를 들면 다음과 같습니다.
메시지 : I am Prof. Nash V. Ruhdney
키 : 3 7 4 1 2 6 5
격자 : I a m P r
o f . N a s
h V . R u
h d n e y * * ('*'는 메시지에 속하지 않는 빈 칸입니다)
암호문 : m .e N yIohha.VnrsuPaR f d
키는 1부터 k까지의 순열입니다. 키의 j번째 값은 j번째 열의 순위를 뜻하며, 열은 순위가 작은 것부터 차례대로 읽습니다. 위 예에서 순위는 3 7 4 1 2 6 5이므로, 순위가 1인 4번째 열을 가장 먼저 읽고, 이어서 순위가 2인 5번째 열, 순위가 3인 1번째 열 순으로 읽어 나갑니다. 메시지 끝을 넘어선 빈 칸은 건너뜁니다.
교수는 암호문을 이메일로 보내고, 키는 전화나 문자 같은 다른 경로로 전달하여 이메일 유출 위험을 줄입니다.
당연히 교수가 손으로 직접 암호화하지는 않을 것입니다. 그를 대신해 암호화를 수행하는 프로그램을 작성하세요.
입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스는 다음과 같습니다.
입력은 파일의 끝에서 종료됩니다.
각 메시지에 대해 암호문을 한 줄에 하나씩 출력하세요.