반복 순열 암호

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

문제

밥과 앨리스는 새로운 암호화 방식을 사용하기로 했다. 이 방식은 공개키 암호가 아니라 두 사람만 아는 비밀 키에 기반한다.

비밀 키는 11 이상 nn 이하의 서로 다른 정수 nn개로 이루어진 수열 a1,a2,,ana_1, a_2, \dots, a_n 이다. 즉 aa11부터 nn까지의 순열이다.

암호화는 다음 원리를 따른다. 메시지를 키 아래에 나란히 적어 메시지의 각 문자를 키의 각 숫자와 위치가 맞도록 정렬한다. 메시지에서 위치 ii에 있는 문자는 암호화된 메시지의 위치 aia_i로 옮겨진다. 이렇게 얻은 암호문에 같은 과정을 다시 적용하며, 이를 총 kk번 반복한다. kk번째 암호화가 끝나면 그 결과를 주고받는다.

메시지의 길이는 항상 nn 이하이다. 메시지가 nn보다 짧으면 길이가 정확히 nn이 되도록 끝에 공백을 채운다.

키와 여러 개의 (반복 횟수 kk, 메시지) 쌍이 주어질 때, 각 메시지를 kk번 암호화한 결과를 출력하는 프로그램을 작성하라.

입력

입력은 여러 개의 블록으로 이루어진다.

각 블록의 첫 줄에는 정수 nn (0<n2000 < n \le 200) 이 주어진다. 다음 줄에는 서로 다르며 각각 11 이상 nn 이하인 nn개의 정수, 즉 키가 공백으로 구분되어 주어진다. 그 다음 줄들에는 정수 kk와 아스키 문자로 이루어진 메시지가 공백 하나로 구분되어 주어진다. 각 줄은 개행으로 끝나며, 이 개행 문자는 메시지에 포함되지 않는다. 블록은 숫자 00 하나만 있는 줄로 끝난다.

마지막 블록 다음에는 숫자 00 하나만 있는 줄이 한 번 더 나오며, 이는 입력의 끝을 뜻한다.

kk는 매우 클 수 있다.

출력

각 (반복 횟수, 메시지) 쌍마다 암호화된 메시지를 한 줄에 하나씩 출력한다. 출력되는 모든 줄은 길이가 정확히 nn이며, 채워 넣은 메시지 끝의 공백까지 그대로 유지한다. 여러 블록의 결과는 입력에 나온 순서대로 이어서 출력하며, 블록 사이에 빈 줄을 넣지 않는다.