사전순으로 가장 작은 경로
시간 제한2초메모리 제한1024 MB
S에서 T로 가는 길이가 10^100 이하인 모든 워크 중 색 수열이 사전순으로 가장 작은 것을 찾고, 불가능하거나 10^6을 넘으면 해당 문구를 출력한다.
문제
개의 정점과 개의 간선으로 이루어진 방향 그래프 가 있다. 각 정점에는 부터 까지의 번호가, 각 간선에는 부터 까지의 번호가 붙어 있다. 각 ()에 대해, 간선 는 정점 에서 정점 로 향하며 고유한 색 를 가진다.
경로(walk)는 간선의 나열 로서, 각 에 대해 (간선 의 끝)가 (간선 의 시작)과 같다. 경로 은 정점 에서 시작해 정점 에서 끝난다고 말한다. 같은 간선이 경로에 여러 번 나타날 수 있다.
경로 의 색 수열은 로 정의한다.
에서 정점 에서 정점 로 가는, 길이가 이하인 모든 경로의 색 수열을 생각하자. 그중 사전순으로 가장 작은 수열을 찾는 프로그램을 작성하시오.
입력
첫째 줄에 네 정수 , , , 가 공백으로 구분되어 주어진다 (, , , , ).
이어서 개의 줄이 주어진다. ()번째 줄에는 세 정수 , , 가 공백으로 구분되어 주어진다 (, , ). 이는 정점 에서 정점 로 향하는 색 의 간선을 나타낸다.
그래프에는 중복 간선이나 자기 자신으로 향하는 간선이 없으며, 각 간선은 고유한 색을 가진다. 즉, 임의의 에 대해 이고 이다.
출력
정점 에서 정점 로 가는 경로가 없으면 "IMPOSSIBLE"을 출력한다. (따옴표 제외)
그렇지 않다면, 을 정점 에서 정점 로 가는, 길이가 이하인 모든 경로의 색 수열 중 사전순으로 가장 작은 수열이라 하자.
- 이면 첫째 줄에 을 출력한다. 각 정수 사이에는 공백을 하나 둔다.
- 이면 "
TOO LONG"을 출력한다. (따옴표 제외)
힌트
수열 이 다른 수열 보다 사전순으로 작다는 것은 다음 중 하나가 성립한다는 뜻이다:
- , , , 이고 인 ()가 유일하게 존재한다.
- 이고 , , , 이다. 즉, 가 의 진부분 접두사이다.