로나와 판은 평소 통신할 때 문장을 암호화하여 통신한다.
이들이 쓰는 암호 알고리즘은 매우 단순한 것으로 흔히 치환 암호법이라고 불린다.
좀 더 자세히 설명하자면 가지의 알파벳에 대해 치환되는 알파벳을 겹치지 않게 배치한 다음, 원래 문장에 있는 알파벳을 모두 치환하는 것이다.
가지 알파벳에 대해 이러한 규칙을 적어놓은 것을 치환표라고 부른다.
예를 들어, 원래 문장 “Hello, world!”가 있다고 하면 이를 “Dpqqr, arzqb!”로 치환할 수 있다. 이때 사용되는 치환 규칙은 [h → d], [e → p], [l → q], [o → r], [w → a], [r → z], [d → b]이며 등장하지 않은 다른 알파벳에 치환되는 알파벳은 확인할 수 없다.
단, [t → t]처럼 치환하기 전과 치환한 이후의 알파벳이 동일한 경우는 올바른 치환표라고 보지 않는다.
원래 문장과 치환된 문장이 주어졌을 때, 가능한 알파벳 치환표의 가짓수를 출력한다.
아래 표는 위의 경우에서 가능한 치환표 중 한 가지이다. 치환표의 아랫 줄에 같은 알파벳이 두 번 등장하지 않음에 유의하라.
가능한 치환표가 하나도 없으면 을 출력한다.
첫 번째 줄에 암호화하기 이전의 원래 문장이 주어진다.
두 번째 줄에 암호화한 이후의 치환된 문장이 주어진다.
각 줄에 주어지는 문자열은 공백을 포함한 특수문자 "' .,!
와 알파벳 대소문자로 이루어져 있고, 길이는 최대 이다. 문자열의 시작과 끝에 공백은 없으며 연속해서 두 개의 공백이 이어져서 주어지지도 않는다. 주어지는 두 문장의 길이는 같다.
원래 문장과 치환된 문장에서 특수문자는 항상 같은 위치에 같은 문자로 주어지며, 알파벳 대소문자 여부가 다르게 주어지지도 않는다.
로나와 판이 사용했다고 볼 수 있는 치환표의 가짓수를 출력한다. 단, 답이 매우 클 수 있으므로 ()로 나눈 나머지를 출력한다. 만약 가능한 치환표가 없는 경우 을 출력한다.
"Hello, world!" "Dpqqr, arzqb!"
428402644
abcdefghijklmnopqrstuvwxyz lusbpkmdevtqchrjfzywniaoxg
1
dog dgo
0
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 26점
암호화하기 이전의 원래 문장에서는 가지 종류의 알파벳이 적어도 한 번은 등장한다.
종류 2: 74점
별다른 제약조건 없음.