복호화

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

암호학에서 치환 암호(substitution cipher)는 평문의 각 문자를 미리 정해진 대치 규칙에 따라 다른 문자로 바꾸어 암호화하는 방식이다.

가장 단순한 형태는 평문 알파벳을 암호문 알파벳으로 일대일 대응시키는 것이다. 예를 들어 다음과 같은 대치표가 주어졌다고 하자.

  • 평문 알파벳: abcdefghijklmnopqrstuvwxyz
  • 암호문 알파벳: wghuvijxpqrstacdebfklmnoyz

이 대치표를 사용하면 평문 hello therexvssc kxvbv로 암호화된다.

흥미로운 점은, 영어의 특성상 알파벳 e가 다른 어떤 알파벳보다도 자주 쓰인다는 것이다. 따라서 대치표를 모르는 상태에서 암호문을 복호화하려 할 때, 암호문에 나타난 알파벳의 빈도를 세어 보면 가장 자주 등장하는 알파벳이 평문의 e에 대응한다고 추측할 수 있다.

주어진 암호문에서 알파벳별 등장 횟수를 세어, 가장 많이 나타난 알파벳을 출력하는 프로그램을 작성하라. 공백은 세지 않는다.

단, 가장 많이 나타난 알파벳이 둘 이상이면 그중 어느 것이 평문 e에 대응하는지 확정할 수 없으므로, '모르겠음'을 뜻하는 ?를 출력한다.

입력

첫 줄에 테스트 케이스의 개수 TT (1T20)(1 \le T \le 20)가 주어진다.

이어서 각 테스트 케이스마다 한 줄씩, 소문자 알파벳과 공백으로 이루어진 영어 문장이 주어진다. 각 문장의 길이는 11 이상 255255 이하이다.

출력

각 테스트 케이스마다 가장 많이 나타난 알파벳을 한 줄에 하나씩 출력한다. 단, 가장 많이 나타난 알파벳이 둘 이상이면 ?를 출력한다.