이동할 때마다 값이 뒤집히는 상황에서 간선의 값과 현재 값이 같을 때만 지날 수 있다. 0번에서 N-1번까지 가는 최단 시간을 구하고, 불가능하면 -1을 출력한다.
알리는 여행 중이고, 목적지 한 곳에 되도록 빨리 닿으려고 한다.
여행지는 장소 NNN개와 도로 EEE개로 이루어진 그래프다. 장소에는 000번부터 N−1N-1N−1번까지 번호가 붙어 있고, 모든 도로는 양방향이다. 도로 하나를 지나는 데 1시간이 걸리며 같은 장소와 같은 도로를 몇 번이든 다시 지날 수 있다.
알리는 000번 장소에서 출발해 N−1N-1N−1번 장소로 가려고 한다.
모든 도로에는 000 또는 111의 값이 붙어 있고, 알리도 000 또는 111의 값을 지닌다. 알리는 자신의 값과 같은 값이 붙은 도로만 지날 수 있다. 도로 하나를 지나고 나면 알리의 값은 곧바로 뒤집힌다. 000이었으면 111이 되고, 111이었으면 000이 된다. 다음 도로를 지난 뒤에도 또 뒤집힌다.
출발할 때의 값은 알리가 직접 고른다. 000으로 시작해도 되고 111로 시작해도 된다. 알리가 N−1N-1N−1번 장소에 닿는 데 걸리는 가장 짧은 시간을 시간 단위로 구하라.
첫째 줄에 정수 NNN과 EEE가 주어진다. (1≤N≤200 0001 \le N \le 200\,0001≤N≤200000, 0≤E≤1 000 0000 \le E \le 1\,000\,0000≤E≤1000000)
다음 EEE개 줄에는 정수 AAA, BBB, VVV가 주어진다. AAA번 장소와 BBB번 장소를 잇는 값 VVV의 양방향 도로가 있다는 뜻이다. 같은 두 장소를 잇는 도로 가운데 값이 같은 것이 둘 이상 주어지는 일은 없다.
모든 도로에 대해 A≠BA \ne BA=B, 0≤A,B<N0 \le A, B < N0≤A,B<N이고 VVV는 000 또는 111이다.
알리가 N−1N-1N−1번 장소에 닿는 데 걸리는 가장 짧은 시간을 정수 하나로 출력한다. 닿을 수 없으면 -1을 출력한다.
알리는 같은 장소와 같은 도로를 다시 지날 수 있으므로, 값만 바꾸려고 일부러 돌아가도 된다. 목적지로 바로 이어지는 도로가 있어도 그 순간 알리의 값이 도로의 값과 다르면 그 도로는 쓸 수 없다.