Kleptography

면접 대비

시간 제한2초메모리 제한512 MB

요약
평문의 끝 n글자만 알고 있을 때 자동키 암호의 평문을 역으로 복원하는 문제입니다.
난이도

보통10점 중 5점

유형
배열, 구현, 수학
정답자
아직 제출이 없습니다

문제

John은 단순한 암호를 좋아한다. 최근까지 그는 일기에 "카이사르" 암호를 사용했지만, 여동생 Mary가 아무 문제 없이 일기를 들여다보는 것을 목격하고 그 암호의 강도에 대해 뼈아픈 교훈을 얻었다.

급히 대안을 찾던 John은 유명한 "Autokey" 암호를 떠올린다. 그는 알파벳 소문자 'a'–'z' 26개를 사전순으로 0부터 25까지의 숫자로 내부적으로 변환하는 방식을 쓴다.

암호화 키 k는 n개의 비밀 접두사로 시작한다. 키의 나머지 글자 각각은 평문 a의 글자에서 복사되어, i ≥ 1에 대해 kn+i = ai가 된다. 평문 a를 암호문 b로 암호화하는 식은 bi = ai + ki mod 26이다.

Mary는 쉽게 포기하지 않는다. 그녀는 John이 가족 컴퓨터에서 일기에 입력한 마지막 n글자를 그가 눈치채기 전에 훔쳐볼 수 있었고, 재빨리 텍스트 문서를 클릭 한 번으로 암호화한 뒤 떠났다. 이번이 그녀의 기회일 수 있다.

입력

입력은 다음과 같다.

  • 두 정수 n과 m이 주어지는 한 줄 (1 ≤ n ≤ 30, n + 1 ≤ m ≤ 100). n은 키워드의 길이이자 Mary가 본 글자 수이고, m은 텍스트의 길이이다.
  • 소문자 n개로 이루어진 한 줄. 평문의 마지막 n글자이다.
  • 소문자 m개로 이루어진 한 줄. 전체 암호문이다.

출력

John 일기의 평문을 출력한다.

예제2

  1. 예제 1

    입력
    5 16
    again
    pirpumsemoystoal
    
    예상 출력
    marywasnosyagain
    
  2. 예제 2

    입력
    1 12
    d
    fzvfkdocukfu
    
    예상 출력
    shortkeyword