다이아몬드 상속 (라지)
면접 대비시간 제한5초메모리 제한512 MB
각 상속 DAG에 서로 다른 상속 경로가 두 개 이상 존재하는 클래스 쌍이 있는지 판정합니다.
문제
클래스 다이어그램을 점검해 다이아몬드 상속이 있는지 판정한다. 아래 그림은 클래스 , , , 네 개로 이루어진 다이어그램이다. 에서 로 향하는 화살표는 클래스 가 클래스 를 상속한다는 뜻이다.

이 다이어그램에서 는 와 를 모두 상속하고, 는 를 상속하며, 도 를 상속한다.
클래스 에서 클래스 로 가는 상속 경로는 형태로 클래스를 나열한 것이다. 여기서 는 을 상속하고, 인 모든 에 대해 는 을 상속하며, 은 를 상속한다. 인 경우도 포함한다. 즉 가 를 직접 상속하면 나열 자체가 상속 경로 하나다. 위 예시에서 에서 로 가는 상속 경로는 와 두 개다.
어떤 클래스 쌍 , 에 대해 에서 로 가는 서로 다른 상속 경로가 두 개 이상 있으면 그 클래스 다이어그램에 다이아몬드 상속이 있다고 한다. 위 다이어그램이 그 전형적인 예다. 주어진 클래스 다이어그램에 다이아몬드 상속이 있는지 판정하라.
입력
첫 줄에 테스트 케이스의 수 가 주어진다. 이어서 개의 테스트 케이스가 주어지고, 각 케이스는 클래스 다이어그램 하나를 나타낸다.
각 테스트 케이스의 첫 줄에는 그 다이어그램의 클래스 수 이 주어진다. 클래스는 번부터 번까지 번호가 붙는다. 다음 개의 줄 가운데 번째 줄은 클래스 가 상속하는 클래스의 수 로 시작하고, 그 뒤에 이상 이하의 서로 다른 정수 개가 이어진다. 이 정수는 클래스 가 상속하는 클래스의 번호다.
입력은 다음을 만족한다.
- 에서 로 가는 상속 경로가 있으면 에서 로 가는 상속 경로는 없다.
- 어떤 클래스도 자기 자신을 상속하지 않는다.
제한
출력
각 다이어그램마다 한 줄에 Case #x: y를 출력한다. 는 부터 시작하는 테스트 케이스 번호이고, 는 그 다이어그램에 다이아몬드 상속이 있으면 Yes, 없으면 No다.