만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

유전자 복원

시간 제한4초메모리 제한1024 MB

요약
각 생물의 부모 정보와 눈 색이 주어질 때, 눈 색이 두 대립유전자 중 앞선 것과 일치하는 유전자 조합을 사전순으로 가장 작게 찾거나 불가능하면 -1을 출력합니다.
난이도

보통10점 중 7점

유형
백트래킹, 그래프
정답자
아직 제출이 없습니다

문제

새로운 종을 연구하면서 수집한 자료가 올바른지 확인하려고 합니다.

생물이 여러 마리 있으며, 각 생물의 눈 색깔을 알고 있습니다. 눈 색깔은 "a"부터 "t"까지의 영어 소문자 중 하나로 주어집니다.

눈 색깔을 정하는 유전자가 하나 있다고 가정합니다. 각 생물은 대립유전자 두 개를 지니며, 대립유전자는 영어 소문자 한 글자입니다. 생물의 눈 색깔은 두 대립유전자 중 알파벳 순서가 앞선 것입니다.

각 생물의 부모 정보도 알고 있습니다. 부모는 두 명 모두 알려져 있거나 두 명 모두 알려져 있지 않습니다. 생물은 부모에게서 대립유전자를 하나씩 물려받으며, 가능한 조합은 네 가지 모두입니다. 예를 들어 대립유전자가 "ak"인 부모(눈 색깔 "a")와 "em"인 부모(눈 색깔 "e")의 자식은 대립유전자가 "ae"(눈 색깔 "a"), "am"(눈 색깔 "a"), "ek"(눈 색깔 "e"), "km"(눈 색깔 "k") 중 하나일 수 있습니다.

생물의 수, 부모 정보, 각 생물의 눈 색깔이 주어졌을 때, 이 자료가 위의 가정과 일치하는지 판단합니다.

입력

첫째 줄에 생물의 수를 나타내는 정수 nn (1≤n≤201 \le n \le 20)이 주어집니다. 생물은 1번부터 nn번까지 번호가 매겨져 있습니다.

이후 nn개의 줄에는 각각 정수 두 개 p1p_1, p2p_2와 문자 하나 cc가 주어집니다. p1p_1, p2p_2는 해당 생물의 부모 번호이며, 1≤p1,p2≤n1 \le p_1, p_2 \le n이고 p1≠p2p_1 \ne p_2입니다. 부모를 모르는 경우에는 p1=p2=0p_1 = p_2 = 0입니다. cc는 해당 생물의 눈 색깔이며 "a"부터 "t"까지 중 하나입니다.

부모는 두 명 모두 주어지거나 두 명 모두 주어지지 않습니다. 부모의 번호는 해당 생물의 번호보다 작습니다. 어떤 생물도 자신의 조상이나 자손이 될 수 없습니다.

출력

정보가 모순되지 않으면, 각 생물의 대립유전자를 한 줄에 한 생물씩, 공백 없이 출력합니다. 해답이 여러 개이면 첫 번째 생물부터 차례로 비교했을 때 사전 순으로 가장 앞서는 해답을 출력합니다. 모순되면 -1을 출력합니다.

예제2

  1. 예제 1

    입력
    3
    0 0 a
    0 0 b
    1 2 c
    
    예상 출력
    ac
    bc
    cc
    
  2. 예제 2

    입력
    3
    0 0 c
    0 0 c
    2 1 a
    
    예상 출력
    -1