암호 해독
시간 제한1초메모리 제한128 MB
평문과 암호문, 블록 크기 k가 주어질 때 모든 블록에서 평문을 암호문으로 바꾸는 순열(키)의 개수를 구합니다.
문제
상근이와 선영이는 메시지를 자주 주고받는다. 두 사람은 다른 사람이 자신들의 메시지를 읽는 것을 원하지 않아, 언제나 메시지를 암호화해서 보낸다. 정인이는 두 사람이 주고받는 메시지를 가로채고 있지만, 암호화되어 있어 그 내용을 읽을 수 없다.
최근 정인이는 어떤 메시지의 평문 원본을 우연히 손에 넣었다. 앞으로 가로챌 다른 메시지도 해독하기 위해, 정인이는 사용된 암호키를 알아내려고 한다.
암호화 방식은 다음과 같다. 평문을 앞에서부터 글자씩 블록으로 나눈 뒤, 각 블록 안의 글자 순서를 하나의 순열에 따라 바꾼다. 순서를 바꾸는 방법은 모두 가지가 있으며, 그중 하나의 순열을 골라 모든 블록에 똑같이 적용한다. 이때 사용한 순열을 암호키라고 한다.
암호키는 부터 까지의 수를 나열해 나타내며, 블록 안 번째 위치의 글자는 암호키의 번째 수가 가리키는 위치로 옮겨진다. 예를 들어 블록 크기가 이고 암호키가 이면, 각 글자는 위치 로 옮겨져 평문 블록 secret은 암호문 etrcse가 된다.
평문과 암호문의 길이는 서로 같고, 그 길이는 항상 로 나누어떨어진다. 모든 블록은 같은 암호키로 암호화된다.
평문 , 암호문 , 블록 크기 가 주어질 때, 을 로 암호화하는 암호키의 개수를 구하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 세 줄이며, 첫째 줄에 블록 크기 , 둘째 줄에 평문 , 셋째 줄에 암호문 가 주어진다. 는 양의 정수이다. 과 는 알파벳 소문자로만 이루어지며, 길이는 최대 이다. 과 의 길이는 서로 같고, 그 길이는 의 배수이다. 입력은 파일의 끝까지 계속된다.
출력
각 테스트 케이스마다 가능한 암호키의 개수를 한 줄에 하나씩 출력한다. 암호키의 개수는 을 넘지 않는다. 만약 을 로 암호화할 수 없다면 을 출력한다.