아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

치환 매니아!

시간 제한5초메모리 제한1024 MB

요약
알려진 평문과 암호문 한 쌍으로 순서가 섞인 치환 암호 최대 12개의 적용 순서를 찾고, 새 암호문을 복호화합니다.
난이도

보통10점 중 6점

유형
완전 탐색, 해시맵, 문자열
정답자
아직 제출이 없습니다

문제

당신의 친구 벤은 치환 암호를 아주 좋아한다.

치환 암호는 알파벳 아래에 다른 문자열을 맞춰 놓은 것이다. 아래 예시와 같다.

평문의 글자마다 위 줄에서 그 글자를 찾아, 아래 줄에서 같은 자리의 글자로 바꾼다. 이 암호는 아래 줄의 문자열로 이름이 붙는다. 이 예시에서 "hello abc"는 "kpxxt sau"로 암호화된다. 벤은 공백을 공백 그대로 둔다. 그래야 덜 헷갈리기 때문이다.

벤은 항상 1개에서 12개 사이의 치환 암호를 차례로 적용해서 메시지를 암호화한다. 다른 사람이 자신의 일을 들여다보지 못하게 하려는 것이다.

벤은 사용한 치환 암호를 한꺼번에 주지 않고 나눠서 준다. 그러다 보니 순서를 틀리게 줄 때도 있다.

다행히 같은 순서의 암호를 쓴 다른 메시지의 평문과 암호문을 가지고 있다. 이 메시지와 암호 목록을 이용해서 벤의 최신 메시지를 복호화하라.

입력

첫 번째 줄에 가지고 있는 메시지의 평문 d0d_0가 주어진다. length(d0)≤10 000\text{length}(d_0) \leq 10\,000이다. 두 번째 줄에는 d0d_0에 대응하는 암호문 e0e_0가 주어진다.

세 번째 줄에는 벤이 사용한 치환 암호의 개수를 나타내는 정수 1≤i≤121 \leq i \leq 12가 주어진다.

이어지는 ii개의 줄에는 각각 치환 암호가 하나씩 주어진다. 각 암호는 소문자 2626개로 이루어진 중복 없는 문자열이다.

마지막 줄에는 복호화해야 할 메시지의 암호문 e1e_1이 주어진다.

텍스트가 있는 모든 줄은 소문자 영어 알파벳과 공백으로만 이루어진다.

주어진 치환 암호를 각각 정확히 한 번씩 사용해서 d0d_0를 e0e_0로 암호화하는 적용 순서는 하나뿐이라고 보장된다.

출력

암호문 e1e_1을 복호화해서 얻은 평문 d1d_1을 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    hey check out this cool substitution cipher
    kpq ukpuz tey ykjn uttx neanyjyeyjti ujfkpv
    1
    saucpwhkjdzxgitfmvnyeborql
    fxpsnp vpnftic
    
    예상 출력
    please respond
    
  2. 예제 2

    입력
    hey its your friend ben
    lik grp kfnm zmgiyj ciy
    5
    orcfnushpmbyxzjltdviqgaewk
    cwnuayzsqekgltdprovmbhxfji
    yfizduprnchxkbvalgwmejoqst
    aoxenqjzclgwkytrpdbmuvihfs
    tyjgklxocquemhanirdwszvpbf
    thy kfn mihj rlgp
    
    예상 출력
    can you read this