계통수(phylogenetic tree)는 다양한 종 또는 개체의 유사성, 물리적 특성, 유전적 특성 등의 차이에 근거하여 유추된 진화적 관계를 보여주는 다이어그램이며, 루트 정점이 있는 트리로 표현된다.
지연이는 오랜 세월의 연구를 통해 N개의 종 사이 상관관계를 규명하는 가설 M개를 제안해 냈다. 각 종은 1부터 N까지의 서로 다른 양의 정수로 구분된다. 지연이는 연구를 검증하기 위해 i번 종이 정점 i에 대응되는 계통수를 만들어보고자 한다.
루트 정점이 있는 트리의 두 정점 x와 y에 대해, 두 정점이 같거나 정점 x가 정점 y의 부모 정점의 조상일 때 정점 x는 정점 y의 조상이다. 정점 x가 정점 y의 조상이면 정점 y는 정점 x의 후손이며 그 역도 성립한다. 두 정점의 최소공통조상은 두 정점을 후손으로 가지는 정점 중 조상의 수가 가장 많은 정점이다.
지연이가 연구를 통해 제안한 가설은 각각 (a,b,c,d) 꼴로 주어진다. 각 가설은 계통수의 정점 a와 정점 b의 최소공통조상이 정점 x이고 정점 c와 정점 d의 최소공통조상이 정점 y일 때, 정점 x가 정점 y의 후손이며 정점 x와 정점 y가 다르다고 주장한다.
N개의 종에 대한 M개의 가설이 주어질 때 i번 종이 정점 i에 대응되는 계통수를 만들어보자. 모든 조건을 충족하는 계통수가 존재한다면 모든 정점의 번호가 1 이상 2N 이하인 계통수가 존재함을 보일 수 있다.
첫 번째 줄에 지연이가 연구한 종의 개수 N과 가설의 개수 M이 공백으로 구분되어 주어진다. (4≤N≤2,000; 1≤M≤2,000)
이후 M개의 줄에 걸쳐 각 가설을 의미하는 네 정수 a,b,c,d가 공백으로 구분되어 주어진다. (1≤a,b,c,d≤N; a=b; c=d)
모든 가설을 충족하는 계통수 T가 존재하지 않으면 첫째 줄에 -1을 출력한다. 그렇지 않으면, 첫째 줄에 계통수 T를 구성하는 정점의 개수 N′ (N≤N′≤2N)을 출력한다. 이때 계통수 T는 정점 1, 정점 2, ⋯, 정점 N′으로 구성된다. 둘째 줄에 N′개의 정수 P_1,P_2,⋯,P_N′을 공백으로 구분하여 출력한다. 정점 i가 T의 루트 정점일 때 P_i는 0이며, 그 외에는 정점 i의 부모 정점의 번호이다.
가능한 계통수가 여러 가지일 경우 아무거나 하나 출력한다.