단어 사전 변환
시간 제한12초메모리 제한128 MB
직접 번역 쌍들 사이 번역 사슬로 연결된 질의 단어의 목표 언어 번역어를 모두 사전 순으로 출력합니다.
문제
여러 언어 사이의 단어 대 단어 직접 번역이 아주 긴 목록으로 주어집니다. 각 항목은 "언어 의 단어 은 언어 의 단어 에 대응한다"라는 형태입니다.
다음과 같은 질의에 답하는 프로그램을 작성하세요: 단어 를 언어 에서 언어 로 옮긴 모든 번역을 찾아라.
번역 관계는 추이적(transitive) 입니다. 즉, 언어 의 단어 가 언어 의 단어 의 번역이 되려면, 이웃한 두 쌍이 항상 서로의 직접 번역인 (단어, 언어) 쌍의 사슬이 존재하여 에서 시작해 까지 이어지면 됩니다.
형식적으로, (단어, 언어) 쌍의 수열 가 존재하여 가 의 직접 번역이고, 이 의 직접 번역이며, , 가 의 직접 번역이면 됩니다.
직접 번역 관계는 대칭적(symmetric) 입니다. 즉, 목록의 각 항목은 두 단어가 서로의 번역임을 뜻합니다.
입력
첫 줄에는 테스트 세트의 개수 가 주어집니다 ().
각 테스트 세트는 다음과 같이 주어집니다.
- 첫 줄에는 직접 번역의 개수 이 주어집니다 ().
- 이어지는 개의 줄에는 각각 네 개의 단어 , , , 가 주어집니다. 이는 언어 의 단어 과 언어 의 단어 가 서로 직접 번역임을 뜻합니다.
- 그다음 줄에는 질의의 개수 이 주어집니다 ().
- 이어지는 개의 줄에는 각각 세 개의 단어 , , 로 이루어진 질의가 주어집니다.
입력에 등장하는 단어의 길이는 최대 자이며, 모든 단어는 영어 소문자(-)로만 이루어집니다. 한 줄의 단어들은 공백 하나로 구분됩니다.
출력
각 질의 에 대해 한 줄을 출력합니다.
- 단어 를 언어 로 옮긴 번역을 하나도 추론할 수 없으면
?를 출력합니다. - 그렇지 않으면 단어 를 언어 로 옮긴 모든 번역을 사전순으로, 쉼표로 구분하여 (공백 없이) 출력합니다.
모든 단어는 자기 자신과도 연결되어 있으므로, 인 질의에서는 단어 자신도 결과에 포함됩니다.
출력해야 하는 전체 데이터의 양은 를 넘지 않는다고 가정해도 좋습니다.