문자열 디코딩

면접 대비

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

요약
문자열, 순열, 그리고 큰 반복 횟수 m이 주어질 때, 순열의 역방향으로 주어진 암호화된 문자열을 복원한다.
난이도

보통10점 중 7점

유형
수학, 구현, 문자열, 시뮬레이션
정답자
아직 제출이 없습니다

문제

문자열을 인코딩하는 다음과 같은 방법이 있다.

인코딩할 문자열의 각 문자를 순서대로 x1,x2,…,xnx_1, x_2, \dots, x_n이라고 하자. 인코딩은 다음 절차를 따른다.

  1. 자연수 mm과, 집합 {1,2,…,n}\{1, 2, \dots, n\}의 서로 다른 nn개의 수로 이루어진 순열 p1,p2,…,pnp_1, p_2, \dots, p_n을 정한다.
  2. 아래 3번 과정을 정확히 mm번 반복한다.
  3. 모든 1≤i≤n1 \le i \le n에 대해 yi=xpiy_i = x_{p_i}로 둔 다음, 각 xix_i를 yiy_i로 바꾼다. (즉 한 번의 과정에서 새 문자열의 ii번째 문자는 이전 문자열의 pip_i번째 문자가 된다.)

예를 들어 문자열 "hello"를 m=3m = 3, 순열 p=(2,3,1,5,4)p = (2, 3, 1, 5, 4)로 인코딩하면 다음과 같이 바뀐다.

"hello" → "elhol" → "lhelo" → "helol"

인코딩된 문자열과, 인코딩에 사용한 mm 및 순열 p1,…,pnp_1, \dots, p_n이 주어질 때, 인코딩하기 전의 원래 문자열을 복원(디코딩)하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다.

각 테스트 케이스의 첫째 줄에는 두 정수 nn과 mm이 주어진다. (1≤n≤801 \le n \le 80, 1≤m≤1091 \le m \le 10^9)

둘째 줄에는 인코딩에 사용한 서로 다른 nn개의 정수 p1,p2,…,pnp_1, p_2, \dots, p_n이 주어진다. (1≤pi≤n1 \le p_i \le n)

셋째 줄에는 인코딩된 문자열이 주어진다. 이 문자열의 길이는 nn이며, 공백이 포함될 수 있다.

입력의 마지막 줄에는 00이 두 개 주어지며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 디코딩한 원래 문자열을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    5 3
    2 3 1 5 4
    helol
    16 804289384
    13 10 2 7 8 1 16 12 15 6 5 14 3 4 11 9
    scssoet tcaede n
    8 12
    5 3 4 2 1 8 6 7
    encoded?
    0 0
    
    예상 출력
    hello
    second test case
    encoded?