만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

암호 충돌

면접 대비

시간 제한20초메모리 제한1024 MB

요약
알파벳 A부터 Z까지에 숫자를 대응시키는 규칙과 단어 목록이 주어질 때, 서로 다른 두 단어가 같은 숫자열로 바뀌는지 판별합니다.
난이도

쉬움10점 중 3점

유형
해시맵, 문자열
정답자
아직 제출이 없습니다

문제

알란은 오늘 학교에서 처음으로 암호학 수업을 들었다. 배운 내용을 활용해 직접 암호를 만들기로 했다. 그는 영문자 A부터 Z까지를 각각 00부터 99까지의 십진수 숫자 하나에 대응시킨다. 그다음 단어의 각 글자를 대응하는 숫자로 바꿔서 단어를 십진수 문자열로 암호화한다.

알란은 영문자가 2626개인데 십진수 숫자는 1010개뿐이라는 점을 놓쳤다. 그래서 충돌이 생길 수 있다. 즉 서로 다른 두 단어가 같은 암호문으로 바뀔 수 있다.

NN개의 단어 목록과 알란이 쓰는 대응표가 주어진다. 목록의 단어들 사이에 충돌이 있는지 판단하라.

입력

입력의 첫 줄에 테스트 케이스 수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 나온다.

각 테스트 케이스의 첫 줄에는 00 이상 99 이하의 정수인 십진수 숫자 26개가 DA,DB,…,DZD_A, D_B, \dots, D_Z 순서로 주어진다. 글자 α\alpha는 숫자 DαD_\alpha에 대응한다.

각 테스트 케이스의 두 번째 줄에는 단어의 개수 NN이 주어진다.

이어지는 NN개의 줄에는 각각 단어 SiS_i가 하나씩 주어진다.

출력

각 테스트 케이스에 대해 Case #x: y 형식으로 한 줄을 출력한다. xx는 1부터 시작하는 테스트 케이스 번호다. 목록에 같은 암호문으로 바뀌는 서로 다른 단어 쌍이 하나라도 있으면 YES를, 없으면 NO를 출력한다.

제한

  • 1≤T≤1001 \le T \le 100.
  • 모든 글자 α\alpha에 대해 0≤Dα≤90 \le D_\alpha \le 9.
  • 모든 ii에 대해 1≤1 \le (SiS_i의 길이) ≤10\le 10.
  • SiS_i의 각 문자는 A부터 Z까지의 대문자 영문자다.
  • i≠ji \ne j인 모든 i,ji, j에 대해 Si≠SjS_i \ne S_j.

힌트

예제 1에서 A의 대응 숫자는 00, B는 11, C는 22, D는 33, E는 33이다. 이 대응에서 ABC는 012012, BC는 1212, BCD는 123123, CDE는 233233으로 암호화된다. 이 암호문들은 모두 서로 다르므로 충돌이 없다.

예제 2에서 C의 대응 숫자는 22, D는 33, E는 33, F는 33, G는 33이다. 이 대응에서 CDE는 233233, DEF는 333333, EFG는 333333으로 암호화된다. DEF와 EFG의 암호문이 같으므로 충돌이 있다.

예제1

  1. 예제 1

    입력
    2
    0 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
    4
    ABC
    BC
    BCD
    CDE
    0 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
    3
    CDE
    DEF
    EFG
    
    예상 출력
    Case #1: NO
    Case #2: YES