Portal Game
면접 대비시간 제한1초메모리 제한1024 MB
0번 칸에서 N-1번 칸까지 가는 최소 시간을 구한다. 레드 포탈은 즉시 이동만 가능하고, 블루 포탈은 즉시 이동하거나 오른쪽으로 한 칸 걸어갈 수 있다.
문제
포탈 게임은 직선 위에서 진행되는 게임이다. 직선에는 부터 까지의 번호가 매겨진 개의 칸이 존재한다. 게임의 목표는 번 칸에서 출발해 번 칸에 가능한 한 빠르게 도착하는 것이다.
이 게임에는 포탈이 총 개 존재하며, 포탈은 레드 포탈과 블루 포탈로 총 두 종류가 있다. 각 칸에는 포탈의 시작 지점이 최대 개 존재할 수 있다. 시작 지점이 번 칸에 있는 포탈을 이용하면, 해당 포탈의 끝 지점인 번 칸으로 이동하게 된다. 포탈은 시작 지점에서 끝 지점으로만 이동할 수 있기 때문에 동일한 포탈을 이용해 번 칸에서 번 칸으로는 이동할 수 없다.
포탈 게임에서는 번 칸에 도착하기 전까지 각 칸의 종류에 따라 아래에 제시된 행동들을 할 수 있다.
- 포탈의 시작 지점이 없는 칸: 현재 위치인 번 칸에서 번 칸으로 초 후 이동한다.
- 레드 포탈의 시작 지점이 있는 칸: 시작 지점이 현재 위치 번 칸인 레드 포탈을 이용해 해당 포탈의 끝 지점으로 초 후 이동한다.
- 블루 포탈의 시작 지점이 있는 칸: 시작 지점이 현재 위치 번 칸인 블루 포탈을 이용해 해당 포탈의 끝 지점으로 초 후 이동하거나 번 칸에서 번 칸으로 초 후 이동한다.
번 칸에서 출발해 번 칸에 도착하기 위한 최소 시간을 출력하는 프로그램을 작성해 보자.
입력
첫 번째 줄에 직선 위에 존재하는 칸의 개수 , 포탈의 개수 가 공백으로 구분되어 주어진다.
두 번째 줄부터 총 개의 줄에 걸쳐 포탈의 정보가 한 줄에 하나씩 주어진다. 각 포탈의 정보는 정수 , , 가 공백으로 구분되어 주어진다. 는 번째 포탈의 종류를 의미하며, 인 경우 레드 포탈, 인 경우 블루 포탈을 의미한다. , 는 각각 번째 포탈의 시작 지점이 위치한 칸의 번호, 번째 포탈의 끝 지점이 위치한 칸의 번호를 의미한다.
모든 포탈의 시작 지점은 중복되지 않는다. 즉, 이면 이다.
출력
첫 번째 줄에 번 칸에서 출발해 번 칸에 도착하기 위해 걸리는 최소 시간을 출력한다.
단, 어떤 방법으로 이동해도 번 칸에 도착할 수 없는 경우에는 을 출력한다.