다이아몬드 상속 (작은 입력)
면접 대비시간 제한5초메모리 제한512 MB
각 상속 관계도에서 두 클래스를 잇는 서로 다른 상속 경로가 두 개 이상 있는지 판정합니다.
문제
클래스 다이어그램을 진단해서 다이아몬드 상속이 있는지 찾아야 한다. 아래 그림은 다이아몬드 상속을 보여 주는 예다. 클래스는 , , , 네 개이고, 에서 로 향하는 화살표는 클래스 가 클래스 를 상속한다는 뜻이다.

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