점진적 뒤섞기

심볼 값의 누적 합을 27로 나눈 나머지로 메시지를 암호화하고, 같은 점화식을 거꾸로 풀어 복호화한다.

쉬움3구현수학문자열누적 합면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

어떤 첩보 기관은 통신을 지키려고 아주 단순한 암호 알고리즘을 쓴다. 이 알고리즘은 메시지의 각 기호를 앞선 기호에 따라 점진적으로 바꾼다. 쓸 수 있는 기호는 공백과 영어 소문자 26개다. 암호화를 위해 공백에 0을, a부터 z까지에 1부터 26까지를 대응시킨다. 기호 ss의 값은 v(s)v(s)로 쓴다.

기호가 s1,s2,,sns_1, s_2, \dots, s_n인 메시지를 생각하자. 알고리즘은 먼저 첫 기호 s1s_1을 값 u1=v(s1)u_1 = v(s_1)로 바꾼다. 이어서 뒤따르는 각 기호 sis_i에 대해 ui=v(si)+ui1u_i = v(s_i) + u_{i-1}을 계산한다. 자기 값과 바로 앞 기호의 계산값을 더하는 것이다. (메시지에 공백이 있으면 앞에서 뒤섞인 글자가 한 번 더 나온다.) 모든 uiu_i가 나올 때까지 이 과정을 반복한다.

이제 메시지는 수의 나열이다. 출력하려면 다시 기호로 되돌려야 한다. 기호가 27개이므로 uiu_i를 27로 나눈 나머지를 구하고, 그 나머지에 대응하는 기호로 바꾼다. 예를 들어 ui=32u_i = 32이면 32mod27=532 \bmod 27 = 5이고 v(e)=5v(e) = 5이므로 기호는 e다.

문자열 "my pie"를 암호화하는 과정은 다음과 같다.

  1. 각 기호 sis_iv(si)v(s_i)로 바꾼다: [13, 25, 0, 16, 9, 5]
  2. uiu_i를 계산한다: [13, 38, 38, 54, 63, 68]
  3. uiu_i를 27로 나눈 나머지를 구한다: [13, 11, 11, 0, 9, 14]
  4. 다시 기호로 바꾼다: "mkk in"

텍스트를 이 알고리즘으로 암호화하고, 이 알고리즘으로 암호화된 텍스트를 복호화하는 프로그램을 작성하라.

입력

첫 줄에 정수 nn이 주어진다 (1n1001 \le n \le 100). 이어지는 nn개의 줄은 각각 문자 e 또는 d, 공백 한 칸, 그리고 줄 끝까지 이어지는 메시지로 이루어진다. 메시지는 영어 소문자와 공백으로만 이루어지며 길이는 1자 이상 80자 이하다. e는 뒤따르는 문자열을 암호화하라는 뜻이고, d는 복호화하라는 뜻이다.

출력

입력에 주어진 각 메시지를 암호화하거나 복호화한 결과를 한 줄에 하나씩 출력한다. 이 문제에서는 공백의 차이도 결과를 가른다. 따라서 공백까지 포함해 정답과 한 글자도 다르지 않게 출력해야 한다.