암호 해독

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

요약
평문과 암호문, 블록 크기 k가 주어질 때 모든 블록에서 평문을 암호문으로 바꾸는 순열(키)의 개수를 구합니다.
난이도

보통10점 중 5점

유형
조합론, 문자열, 완전 탐색
정답자
아직 제출이 없습니다

문제

상근이와 선영이는 메시지를 자주 주고받는다. 두 사람은 다른 사람이 자신들의 메시지를 읽는 것을 원하지 않아, 언제나 메시지를 암호화해서 보낸다. 정인이는 두 사람이 주고받는 메시지를 가로채고 있지만, 암호화되어 있어 그 내용을 읽을 수 없다.

최근 정인이는 어떤 메시지의 평문 원본을 우연히 손에 넣었다. 앞으로 가로챌 다른 메시지도 해독하기 위해, 정인이는 사용된 암호키를 알아내려고 한다.

암호화 방식은 다음과 같다. 평문을 앞에서부터 kk글자씩 블록으로 나눈 뒤, 각 블록 안의 글자 순서를 하나의 순열에 따라 바꾼다. 순서를 바꾸는 방법은 모두 k!k!가지가 있으며, 그중 하나의 순열을 골라 모든 블록에 똑같이 적용한다. 이때 사용한 순열을 암호키라고 한다.

암호키는 11부터 kk까지의 수를 나열해 나타내며, 블록 안 ii번째 위치의 글자는 암호키의 ii번째 수가 가리키는 위치로 옮겨진다. 예를 들어 블록 크기가 66이고 암호키가 (5 1 4 3 6 2)(5\,1\,4\,3\,6\,2)이면, 각 글자는 위치 1→5, 2→1, 3→4, 4→3, 5→6, 6→21\to5,\ 2\to1,\ 3\to4,\ 4\to3,\ 5\to6,\ 6\to2로 옮겨져 평문 블록 secret은 암호문 etrcse가 된다.

평문과 암호문의 길이는 서로 같고, 그 길이는 항상 kk로 나누어떨어진다. 모든 블록은 같은 암호키로 암호화된다.

평문 MM, 암호문 CC, 블록 크기 kk가 주어질 때, MM을 CC로 암호화하는 암호키의 개수를 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 세 줄이며, 첫째 줄에 블록 크기 kk, 둘째 줄에 평문 MM, 셋째 줄에 암호문 CC가 주어진다. kk는 양의 정수이다. MM과 CC는 알파벳 소문자로만 이루어지며, 길이는 최대 100100이다. MM과 CC의 길이는 서로 같고, 그 길이는 kk의 배수이다. 입력은 파일의 끝까지 계속된다.

출력

각 테스트 케이스마다 가능한 암호키의 개수를 한 줄에 하나씩 출력한다. 암호키의 개수는 263−12^{63}-1을 넘지 않는다. 만약 MM을 CC로 암호화할 수 없다면 00을 출력한다.

예제3

  1. 예제 1

    입력
    4
    treewood
    ertedowo
    6
    secret
    etrcse
    1
    impossibru
    youdontsay
    
    예상 출력
    1
    2
    0
    
  2. 예제 2

    입력
    2
    ab
    ba
    
    예상 출력
    1
    
  3. 예제 3

    입력
    4
    aabb
    bbaa
    
    예상 출력
    4