형의 일기
면접 대비시간 제한1초메모리 제한128 MB
암호문에서 가장 자주 나온 글자가 E가 되도록 하는 카이사르 이동 거리를 구해 가장 작은 d와 복호화한 문장을 출력하고, 조건을 만족하는 d가 여러 개면 NOT POSSIBLE을 출력한다.
문제
요즘 안전하게 소통하려는 사람들은 RSA 같은 비대칭 암호 알고리즘을 사용한다. 하지만 우리 형은 그보다 간단한 방법으로 일기를 지킨다. 바로 평문의 각 글자를 알파벳의 다른 글자로 바꾸는 치환 암호인데, 언제나 같은 고정된 거리만큼 밀어서 바꾼다. 이 고정 거리 가 라면 A는 F로, B는 G로, C는 H로 바뀌며, 알파벳의 끝을 넘어가면 다시 처음으로 돌아와 Y는 D로, Z는 E로 바뀐다.
거리 가 고정되어 있고 알려져 있다면 복호화는 쉬울 것이다. 그러나 형은 일기 항목마다 거리를 무작위로 정하므로, 어떤 항목을 읽으려면 먼저 그 항목의 거리 를 알아내야 한다. 이를 위해 나는 영어 문장에서 글자 E가 다른 어떤 글자보다 자주 나온다는 잘 알려진 사실을 이용한다.
암호문에서 가장 자주 나오는 글자가 평문의 글자 E에 해당한다고 가정하여 거리 를 계산하는 프로그램을 만들어 줄 수 있는가? 물론 복호화된 문장도 함께 보고 싶다.
입력
첫째 줄에 테스트 케이스의 개수 가 주어진다. 이어지는 개의 줄에는 각각 일기 항목이 정확히 하나씩 주어진다. 일기 항목은 대문자 알파벳(A–Z)과 공백만으로 이루어지며, 각 항목의 길이는 공백을 포함하여 최대 자이다.
출력
각 테스트 케이스마다 한 줄에 가능한 가장 작은 거리 와 복호화된 문장을 함께 출력한다. 위 규칙에 맞는 거리가 둘 이상이어서 복호화가 불가능하다면, 대신 NOT POSSIBLE을 출력한다. 공백은 암호화되지 않는다.