암호학에서 치환 암호(substitution cipher)는 평문의 각 문자를 미리 정해진 대치 규칙에 따라 다른 문자로 바꾸어 암호화하는 방식이다.
가장 단순한 형태는 평문 알파벳을 암호문 알파벳으로 일대일 대응시키는 것이다. 예를 들어 다음과 같은 대치표가 주어졌다고 하자.
abcdefghijklmnopqrstuvwxyzwghuvijxpqrstacdebfklmnoyz이 대치표를 사용하면 평문 hello there는 xvssc kxvbv로 암호화된다.
흥미로운 점은, 영어의 특성상 알파벳 e가 다른 어떤 알파벳보다도 자주 쓰인다는 것이다. 따라서 대치표를 모르는 상태에서 암호문을 복호화하려 할 때, 암호문에 나타난 알파벳의 빈도를 세어 보면 가장 자주 등장하는 알파벳이 평문의 e에 대응한다고 추측할 수 있다.
주어진 암호문에서 알파벳별 등장 횟수를 세어, 가장 많이 나타난 알파벳을 출력하는 프로그램을 작성하라. 공백은 세지 않는다.
단, 가장 많이 나타난 알파벳이 둘 이상이면 그중 어느 것이 평문 e에 대응하는지 확정할 수 없으므로, '모르겠음'을 뜻하는 ?를 출력한다.
첫 줄에 테스트 케이스의 개수 T (1≤T≤20)가 주어진다.
이어서 각 테스트 케이스마다 한 줄씩, 소문자 알파벳과 공백으로 이루어진 영어 문장이 주어진다. 각 문장의 길이는 1 이상 255 이하이다.
각 테스트 케이스마다 가장 많이 나타난 알파벳을 한 줄에 하나씩 출력한다. 단, 가장 많이 나타난 알파벳이 둘 이상이면 ?를 출력한다.