팬 그룹
시간 제한1초메모리 제한128 MB
방향 그래프와 각 도로에서 충돌이 있었는지가 주어질 때, 표시된 충돌과 일치하는 가장 사전순으로 앞선 그룹 순서를 출력하거나 -1을 출력한다.
문제
한 도시에 번부터 번까지 번호가 매겨진 광장 개가 있고, 이들을 잇는 일방통행 도로 개가 있습니다. 이 도시에는 축구 팬 그룹도 개 있으며, 팬 그룹 의 본부는 광장 에 있습니다.
어느 날 팬 그룹들은 "도시 투어"를 벌입니다. 미리 정해 둔 순서에 따라 그룹들이 한 번에 하나씩 광장을 점령해 나갑니다. 처음에는 어떤 광장도 점령되어 있지 않습니다. 그룹들은 엄격히 차례대로 움직이며, 한 그룹은 바로 앞 그룹이 자기 차례를 끝낸 뒤에야 시작합니다.
팬 그룹 의 차례가 되면:
- 광장 가 이미 다른 그룹 에게 점령되어 있다면, 그룹 는 아무것도 하지 않습니다.
- 그렇지 않다면, 그룹 는 광장 를 점령한 뒤 퍼져 나갑니다. 어떤 광장 를 점령할 때마다 그룹은 에서 나가는 모든 도로로 팬들을 보냅니다. 도로 에 대해: 가 이미 다른 그룹에게 점령되어 있으면 지나갈 수 없어 그 도로에서 싸움이 벌어집니다. 가 아직 점령되지 않았으면 그룹은 도 점령하고 거기서부터 계속 퍼져 나갑니다.
- 더 이상 도달할 수 있는 빈 광장이 없으면 차례가 끝납니다.
두 그룹은 싸움이 벌어진 도로에서 정확히 마주치므로, 싸움 기록은 어느 도로가 막혔는지를 그대로 알려 줍니다. 도시 지도와 함께 각 도로에서 싸움이 일어났는지 여부가 주어질 때, 그룹들이 움직였을 수 있는 순서를 복원하세요.
입력
첫째 줄에 광장의 수 과 일방통행 도로의 수 이 주어집니다. 다음 개의 줄에는 각각 세 정수 , , 가 주어지며, 이는 광장 에서 광장 로 가는 일방통행 도로를 나타냅니다. 이면 이 도로에서 싸움이 일어났고, 이면 일어나지 않았습니다. 서로 다른 두 광장 사이에는 같은 방향의 도로가 최대 하나만 존재합니다.
출력
싸움이 표시된 도로들에서만 정확히 일어나도록 하는 움직임 순서가 존재하지 않으면 을 출력합니다.
그렇지 않으면 한 줄에, 유효한 순서 중 사전순으로 가장 앞서는 것을 출력합니다. 즉 부터 까지의 순열 을 공백 하나로 구분하여 출력하며, 이는 광장 의 그룹이 가장 먼저, 그다음 광장 의 그룹, ... 순으로 움직였음을 뜻합니다. 유효한 순서가 여러 개라면 사전순으로 가장 작은 수열을 출력합니다(을 먼저 비교하고, 같으면 를 비교하는 식).
제한
- , ,
힌트
광장 개와 일방통행 도로 개가 있고, 도로 , , , 에서 싸움이 기록된 경우를 생각해 봅시다. 유효한 움직임 순서 중 하나는 입니다:
- 그룹 이 먼저 움직여 광장 을 점령합니다.
- 그룹 가 광장 , , 를 점령합니다(모두 빈 광장을 통해 도달 가능).
- 그룹 은 자기 광장이 이미 점령되어 있어 아무것도 하지 않습니다.
- 그룹 가 광장 와 을 점령합니다.
- 그룹 은 아무것도 하지 않습니다.
- 그룹 이 광장 을 점령합니다. 도로 와 은 이미 점령된 광장으로 향하므로 그곳에서 싸움이 벌어집니다.
- 그룹 이 광장 을 점령합니다. 도로 과 도 이미 점령된 광장으로 향하므로 그곳에서 싸움이 벌어집니다.
- 그룹 는 아무것도 하지 않습니다.
이 순서는 기록된 네 싸움만 정확히 만들어 내므로 유효합니다. 이 입력에는 유효한 순서가 여러 개 있으며(예: 도 유효합니다), 요구되는 답은 그중 사전순으로 가장 작은 입니다. 반면 순서 는 표시되지 않은 도로 에서 싸움을 만들어 내므로 유효하지 않습니다.