메이플 월드는 개의 마을로 구성되어 있다. 메이플 월드에서 라이딩을 타면, 비행 기능을 통해 현재 위치한 마을에서 출발해 일정 시간 후 다른 마을에 도착한다.
요정 웡키는 종류의 라이딩을 가지고 있는데, 번 라이딩은 마을 에서만 탈 수 있고 초 후에 다른 마을 에 도착한다.
요정 웡키는 마을 에서 시작해 라이딩을 타고 서로 다른 마을을 여행하는 여행 계획을 세우려 한다. 이때, 여행 계획의 소요 시간은 라이딩을 타는 데 걸리는 시간의 총합이다.
요정 웡키는 여행 계획의 소요 시간이 너무 짧거나 긴 것을 원하지 않는다. 이를 위해 소요 시간이 번째로 짧은 여행 계획의 소요 시간을 구하려 한다. 다시 말해, 가능한 모든 여행 계획을 소요 시간이 짧은 순으로 나열한 후 번째 여행 계획의 소요 시간을 구하려 한다. 이때, 소요 시간이 같은 여행 계획은 임의의 순서로 나열한다.

예를 들어, 메이플 월드의 마을 개와 라이딩 종류가 <그림 1>과 같을 때, 마을 에서 시작해서 소요 시간이 번째로 짧은 여행 계획의 소요 시간을 구해보자.

<그림 2>와 같이 가지 여행 계획이 가능하고, 소요 시간이 번째로 짧은 여행계획의 소요 시간은 초이다.
요정 웡키를 대신해서 서로 다른 마을을 방문하는 소요 시간이 번째로 짧은 여행 계획이 존재하는지, 만약 존재한다면 그 여행 계획의 소요 시간을 출력하는 프로그램을 작성하여라.
입력 형식
첫 줄에 네 개의 정수 , , , 가 공백으로 구분되어 주어진다.
이후 개의 줄에 대해 번 라이딩의 정보를 나타내는 세 개의 정수 , , 가 공백으로 구분되어 주어진다.
여기서, 모든 에 대해 이며, 모든 서로 다른 , 쌍에 대해 혹은 이다. 또한, 마을 에서 출발하여 도달할 수 없는 마을은 없다.
출력 형식
첫 줄에 소요 시간이 번째로 짧은 여행 계획의 소요 시간을 출력한다.
만약 소요 시간이 번째로 짧은 여행 계획이 존재하지 않는다면 -1을 출력한다.
예제
입력
4 6 4 1 1 2 3 1 4 4 2 3 5 2 4 2 3 4 3 4 3 1
출력
5
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 7점
종류 2: 17점
종류 3: 30점
종류 4: 46점
추가적인 제한 조건이 없음.
해설
문제를 길이 이하인 단순 경로가 개 이상인지 판단하는 결정 문제로 변환할 수 있고, 해당 문제는 백트래킹을 최대 개의 정점만 방문하도록 돌리면 가능한지 판별할 수 있다.
이때 단순하게 돌리면 정점들이 이미 방문했는지 체크하는 부분이 최대 에 비례하게 될 수 있기 때문에, 간선을 정렬해두고 인접리스트로 관리하면서, indegree가 이하인 정점들에 대해 방문 시 자신으로 오는 간선들을 제거하는 방식으로 처리하면 indegree가 이상인 정점들은 최대 개 있기 때문에 이미 방문한 정점은 최대 개만 존재하고, 복원, 제거 작업에 드는 비용이 최대 이기 때문에 총 시간 복잡도는 이 된다.