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

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

여전히 부끄러운 암호학자

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

요약
알 수 없는 치환 암호로 만든 평문과 암호문이 주어질 때 암호문을 반복 암호화해 평문으로 되돌리는 횟수를 구하고 결과가 하나로 정해지지 않으면 mjau를 출력합니다.
난이도

보통10점 중 7점

유형
그래프, 정수론, 조합론
정답자
아직 제출이 없습니다

문제

암호학자 뵈르게가 회사에서 쓸 새 보안 모듈을 만든다. 지난번 모듈은 코드를 아무도 이해하지 못해 문제가 많았기 때문에, 이번에는 훨씬 단순하게 만들라는 지시를 받았다.

비밀키 cc는 알파벳 대문자 26자를 대문자 26자로 보내는 일대일 대응이다. 문자열 S=s1s2…smS = s_1 s_2 \dots s_m의 암호문은 crypt(S)=c(s1)c(s2)…c(sm)\mathrm{crypt}(S) = c(s_1) c(s_2) \dots c(s_m)이고, 복호화 키 c−1c^{-1}은 c−1(c(s))=sc^{-1}(c(s)) = s를 만족한다.

이 방식에는 약점이 있다. 어떤 qq에 대해 cryptq(crypt(S))=S\mathrm{crypt}^q(\mathrm{crypt}(S)) = S가 성립하므로, 공격자는 암호문에 crypt\mathrm{crypt}를 계속 적용하기만 해도 원문을 얻는다. qq가 작으면 위험하니 뵈르게는 먼저 qq를 알아야 한다.

원문 SS와 그에 대응하는 암호문 T=crypt(S)T = \mathrm{crypt}(S)가 주어진다. qq는 TT에 crypt\mathrm{crypt}를 qq번 더 적용했을 때 SS가 되는 가장 작은 음이 아닌 정수다.

SS와 TT는 SS에 등장하는 문자에서만 cc의 값을 알려주고, 나머지 문자의 상은 알 수 없다. SS와 TT에 어긋나지 않는 키 cc가 모두 같은 qq를 준다면 그 값을 출력하고, 키에 따라 qq가 달라진다면 mjau를 출력한다.

입력

첫 줄에 테스트 케이스의 수 nn이 주어진다 (1≤n≤1001 \le n \le 100). 각 테스트 케이스는 두 줄이고, 첫 줄에 원문 SS, 둘째 줄에 암호문 TT가 주어진다. crypt(S)=T\mathrm{crypt}(S) = T를 만족하는 키가 적어도 하나 존재한다. 두 문자열은 'A'부터 'Z'까지의 대문자로만 이루어지며 1≤∣S∣=∣T∣≤10001 \le |S| = |T| \le 1000이다. 암호화 함수 cc는 테스트 케이스마다 다르다.

출력

각 테스트 케이스마다 한 줄에 qq를 출력한다. SS와 TT만으로 qq를 정할 수 없으면 mjau를 출력한다.

예제1

  1. 예제 1

    입력
    3
    CRYPTO
    CPTOYR
    A
    A
    A
    B
    
    예상 출력
    5
    0
    mjau