단어 사전 변환

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

문제

여러 언어 사이의 단어 대 단어 직접 번역이 아주 긴 목록으로 주어집니다. 각 항목은 "언어 AA의 단어 S1S_1은 언어 BB의 단어 S2S_2에 대응한다"라는 형태입니다.

다음과 같은 질의에 답하는 프로그램을 작성하세요: 단어 SS를 언어 AA에서 언어 BB로 옮긴 모든 번역을 찾아라.

번역 관계는 추이적(transitive) 입니다. 즉, 언어 BB의 단어 S2S_2가 언어 AA의 단어 S1S_1의 번역이 되려면, 이웃한 두 쌍이 항상 서로의 직접 번역인 (단어, 언어) 쌍의 사슬이 존재하여 (S1,A)(S_1, A)에서 시작해 (S2,B)(S_2, B)까지 이어지면 됩니다.

형식적으로, (단어, 언어) 쌍의 수열 (Xi,Ji)(X_i, J_i)가 존재하여 (S1,A)(S_1, A)(X1,J1)(X_1, J_1)의 직접 번역이고, (X1,J1)(X_1, J_1)(X2,J2)(X_2, J_2)의 직접 번역이며, \dots, (Xk,Jk)(X_k, J_k)(S2,B)(S_2, B)의 직접 번역이면 됩니다.

직접 번역 관계는 대칭적(symmetric) 입니다. 즉, 목록의 각 항목은 두 단어가 서로의 번역임을 뜻합니다.

입력

첫 줄에는 테스트 세트의 개수 ZZ가 주어집니다 (1Z101 \le Z \le 10).

각 테스트 세트는 다음과 같이 주어집니다.

  • 첫 줄에는 직접 번역의 개수 NN이 주어집니다 (1N400001 \le N \le 40000).
  • 이어지는 NN개의 줄에는 각각 네 개의 단어 S1S_1, AA, S2S_2, BB가 주어집니다. 이는 언어 AA의 단어 S1S_1과 언어 BB의 단어 S2S_2가 서로 직접 번역임을 뜻합니다.
  • 그다음 줄에는 질의의 개수 MM이 주어집니다 (1M100001 \le M \le 10000).
  • 이어지는 MM개의 줄에는 각각 세 개의 단어 SS, AA, BB로 이루어진 질의가 주어집니다.

입력에 등장하는 단어의 길이는 최대 2020자이며, 모든 단어는 영어 소문자(aa-zz)로만 이루어집니다. 한 줄의 단어들은 공백 하나로 구분됩니다.

출력

각 질의 (S,A,B)(S, A, B)에 대해 한 줄을 출력합니다.

  • 단어 SS를 언어 BB로 옮긴 번역을 하나도 추론할 수 없으면 ?를 출력합니다.
  • 그렇지 않으면 단어 SS를 언어 BB로 옮긴 모든 번역을 사전순으로, 쉼표로 구분하여 (공백 없이) 출력합니다.

모든 단어는 자기 자신과도 연결되어 있으므로, A=BA = B인 질의에서는 단어 SS 자신도 결과에 포함됩니다.

출력해야 하는 전체 데이터의 양은 20MB20\,\text{MB}를 넘지 않는다고 가정해도 좋습니다.