W의 암호

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

문제

메모리가 매우 작은 소형 무선 기기의 통신을 보호하기 위해 다음과 같은 간단한 암호를 사용한다. 이 암호를 구현하라.

암호화에는 세 개의 정수 키 $k_1$, $k_2$, $k_3$가 필요하다. 문자는 세 그룹으로 나뉜다. 알파벳 [a-i]가 첫 번째 그룹, [j-r]가 두 번째 그룹, 나머지 문자([s-z]와 밑줄 _)가 세 번째 그룹이다. 한 그룹에 속한 문자들만 메시지에서 왼쪽부터 나타나는 순서대로 모은 뒤, 암호화는 이 부분 수열을 왼쪽으로 $k_i$칸 회전시키고 회전된 문자들을 원래 위치에 그대로 다시 써 넣는다. 각 그룹은 서로 독립적으로 회전하며, 한 그룹을 회전해도 다른 그룹의 문자는 움직이지 않는다.

복호화는 이 과정을 되돌린다. 즉 각 그룹 안에서 부분 수열을 오른쪽으로 $k_i$칸 회전시킨다.

예를 들어 메시지 the_quick_brown_fox를 키 $k_1=2$, $k_2=3$, $k_3=1$로 암호화하면 _icuo_bfnwhoq_kxert가 된다. 복호화하려면 암호문에서 [a-i] 그룹의 문자들을 보면 된다. 이들은 i, c, b, f, h, e이고 (1부터 세는) 위치 2, 3, 7, 8, 11, 17에 있다. $k_1=2$만큼 오른쪽으로 회전하면 이 위치들에는 h, e, i, c, b, f가 들어간다. 아래 표는 각 그룹을 차례로 복호화했을 때 메시지가 어떻게 바뀌는지 보여 준다.

단계회전 그룹회전 전회전 후
1[a-i], 오른쪽 $k_1=2$_icuo_bfnwhoq_kxert_heuo_icnwboq_kxfrt
2[j-r], 오른쪽 $k_2=3$_heuo_icnwboq_kxfrt_heuq_ickwbro_nxfot
3[s-z]_, 오른쪽 $k_3=1$_heuq_ickwbro_nxfotthe_quick_brown_fox

주어진 키와 암호문에 대해 복호화된 메시지를 출력하라.

입력

모든 문자열은 소문자와 밑줄(_)로만 이루어지며 길이는 최대 80자이다. 모든 $k_i$는 1 이상 100 이하의 정수이다.

입력에는 하나 이상의 암호문이 주어진다. 각 암호문은 두 줄로 주어진다. 첫 줄에는 세 키 $k_1$, $k_2$, $k_3$가 공백으로 구분되어 있고, 둘째 줄에는 암호문이 있다. 입력의 끝은 키가 모두 0인 줄 0 0 0으로 표시되며, 이 줄은 처리하지 않는다.

출력

각 암호문에 대해 복호화된 문자열을 한 줄에 하나씩 출력한다.