무빙워크

시간 제한2초메모리 제한1024 MB

문제

UDP 시티는 $N$개의 건물과 각 건물을 잇는 $M$개의 무빙워크로 이루어져 있다. 각 건물과 무빙워크에는 $1$번부터 차례로 번호가 매겨져 있다. 포닉스는 각 무빙워크의 전원을 끄거나 켤 수 있다. 무빙워크는 전원 상태에 따라 아래와 같이 동작한다.

  • $i$번째 무빙워크의 전원이 켜져 있는 경우, $u_i$번 건물에서 $v_i$번 건물로의 방향으로만 이동할 수 있다. 이 경우 이동 시간은 $d_i$이다.
  • $i$번째 무빙워크의 전원이 꺼져 있는 경우, $u_i$번 건물과 $v_i$번 건물 사이를 방향에 관계없이 이동할 수 있다. 이 경우 이동 시간은 $2d_i$이다.

포닉스는 현재 $1$번 건물에 있으며, 각 무빙워크의 전원을 적절히 조작해 다른 모든 건물에 대한 최단 도달 시간의 합을 최소화하려 한다. 이때 $1$번 건물에서 도달할 수 없는 건물이 존재해서는 안 된다.

도달할 수 없는 건물이 존재하지 않는 모든 경우에 대해서 모든 건물에 대한 최단 도달 시간의 합의 최솟값과 이때 각 무빙워크의 전원 상태를 구해 보자.

입력

첫째 줄에 건물의 개수 $N$, 무빙워크의 개수 $M$이 공백으로 구분되어 주어진다. $(2 \le N \le 300\ 000; 1 \le M \le 500\ 000)$

둘째 줄부터 $M$개의 줄에 걸쳐 세 정수 $u_i, v_i, d_i$가 공백으로 구분되어 주어진다. 이는 $i$번째 무빙워크의 전원이 켜져 있을 때 $u_i$번 건물에서 $v_i$번 건물으로 이동하는 것이 가능하며 $d_i$의 이동 시간을 가짐을 의미한다. $(1 \le u_i, v_i \le N; u_i \ne v_i; 1 \le d_i \le 10^6)$

모든 무빙워크의 전원을 껐을 때, $1$번 건물에서 다른 모든 건물로 도달할 수 있음이 보장되며 서로 다른 무빙워크에 대해 $(u, v)$ 쌍은 서로 다르다.

출력

첫째 줄에 가능한 최단 도달 시간 합의 최솟값을 출력한다.

둘째 줄에는 각 무빙워크의 전원 상태를 나타내는 정수 $P_1, P_2, \cdots , P_M$을 공백으로 구분해 출력한다. $P_i$는 $i$번째 무빙워크의 전원을 켜야 할 경우 $1$, 꺼야 할 경우 $0$이다. 가능한 전원 상태가 여러 개일 경우 그 중 아무것이나 출력하여라.