계통수 추론

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

문제

계통수(phylogenetic tree)는 다양한 종 또는 개체의 유사성, 물리적 특성, 유전적 특성 등의 차이에 근거하여 유추된 진화적 관계를 보여주는 다이어그램이며, 루트 정점이 있는 트리로 표현된다.

지연이는 오랜 세월의 연구를 통해 NN개의 종 사이 상관관계를 규명하는 가설 MM개를 제안해 냈다. 각 종은 11부터 NN까지의 서로 다른 양의 정수로 구분된다. 지연이는 연구를 검증하기 위해 ii번 종이 정점 ii에 대응되는 계통수를 만들어보고자 한다.

루트 정점이 있는 트리의 두 정점 xxyy에 대해, 두 정점이 같거나 정점 xx가 정점 yy의 부모 정점의 조상일 때 정점 xx는 정점 yy의 조상이다. 정점 xx가 정점 yy의 조상이면 정점 yy는 정점 xx의 후손이며 그 역도 성립한다. 두 정점의 최소공통조상은 두 정점을 후손으로 가지는 정점 중 조상의 수가 가장 많은 정점이다.

지연이가 연구를 통해 제안한 가설은 각각 (a,b,c,d)(a,b,c,d) 꼴로 주어진다. 각 가설은 계통수의 정점 aa와 정점 bb의 최소공통조상이 정점 xx이고 정점 cc와 정점 dd의 최소공통조상이 정점 yy일 때, 정점 xx가 정점 yy의 후손이며 정점 xx와 정점 yy가 다르다고 주장한다.

NN개의 종에 대한 MM개의 가설이 주어질 때 ii번 종이 정점 ii에 대응되는 계통수를 만들어보자. 모든 조건을 충족하는 계통수가 존재한다면 모든 정점의 번호가 11 이상 2N2N 이하인 계통수가 존재함을 보일 수 있다.

입력

첫 번째 줄에 지연이가 연구한 종의 개수 NN과 가설의 개수 MM이 공백으로 구분되어 주어진다. (4N2,000;(4\leq N\leq 2\\, 000; 1M2,000)1\leq M\leq 2\\, 000)

이후 MM개의 줄에 걸쳐 각 가설을 의미하는 네 정수 a,b,c,da,b,c,d가 공백으로 구분되어 주어진다. (1a,b,c,dN;(1\leq a,b,c,d\leq N; ab;a\neq b; cd)c\neq d)

출력

모든 가설을 충족하는 계통수 TT가 존재하지 않으면 첫째 줄에 -1을 출력한다. 그렇지 않으면, 첫째 줄에 계통수 TT를 구성하는 정점의 개수 NN' (NN2N)(N\leq N'\leq 2N)을 출력한다. 이때 계통수 TT는 정점 11, 정점 22, \cdots, 정점 NN'으로 구성된다. 둘째 줄에 NN'개의 정수 P_1,P_2,,P_NP\_1,P\_2,\cdots ,P\_{N'}을 공백으로 구분하여 출력한다. 정점 iiTT의 루트 정점일 때 P_iP\_i00이며, 그 외에는 정점 ii의 부모 정점의 번호이다.

가능한 계통수가 여러 가지일 경우 아무거나 하나 출력한다.