만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

페인트 칠하기

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

요약
도로마다 색이 정해진 그래프에서 각 건물의 최종 색이 목표 색과 같아지는 이동 경로가 있는지 판단하고, 가능하면 방문 횟수 100만 이하의 경로를 출력합니다.
난이도

어려움10점 중 8점

유형
그래프, 구현
정답자
아직 제출이 없습니다

문제

건물 NN개와 도로 MM개로 이루어진 도시가 있습니다. ii번 도로는 uiu_i번 건물과 viv_i번 건물을 양방향으로 잇습니다. 같은 건물 쌍을 잇는 도로는 두 개 이상 없습니다. 각 도로는 KK가지 색 중 하나의 유성 페인트로 칠해져 있으며, ii번 도로의 색은 cic_i번입니다. 페인트가 아직 마르지 않았으므로, ii번 도로를 지나 방문한 건물은 cic_i번 색으로 덧칠됩니다. (1≤i≤M1 \le i \le M) 처음에는 모든 건물의 색이 00번 색입니다.

행위예술가 은하는 다음 방법으로 건물에 색을 칠하려고 합니다.

  • 은하는 처음에 시작할 건물을 고르고, 그 건물로 갑니다.
  • 모든 건물에 원하는 색이 칠해질 때까지 다음 단계를 반복합니다.
    • 현재 aa번 건물에서 pp번 색으로 칠해진 도로를 따라 인접한 bb번 건물로 이동합니다. 같은 건물을 여러 번 방문해도 됩니다. 이때 (a,b,p)=(ui,vi,ci)(a,b,p) = (u_i,v_i,c_i) 또는 (vi,ui,ci)(v_i,u_i,c_i)인 ii가 존재해야 합니다.
    • bb번 건물의 이전 색과 관계없이 pp번 색으로 덧칠합니다.

은하는 1≤j≤N1 \le j \le N인 모든 jj에 대해 jj번 건물의 색을 rjr_j로 칠하려고 합니다. 가능한지 판단하고, 가능하면 방법을 하나 출력하세요.

입력

첫 줄에 건물 수 NN, 도로 수 MM, 색의 수 KK가 공백으로 구분되어 주어집니다. (2≤N≤100 0002 \le N \le 100\,000, 1≤M≤200 0001 \le M \le 200\,000, 1≤K≤100 0001 \le K \le 100\,000)

둘째 줄에는 목표 색 r1,r2,⋯ ,rNr_1, r_2, \cdots, r_N이 공백으로 구분되어 주어집니다. (1≤rj≤K1 \le r_j \le K)

다음 MM개의 줄 중 ii번째 줄에는 도로 정보 uiu_i, viv_i, cic_i가 공백으로 구분되어 주어집니다. (1≤ui<vi≤N1 \le u_i < v_i \le N, 1≤ci≤K1 \le c_i \le K, i≠ji \ne j이면 (ui,vi)≠(uj,vj)(u_i, v_i) \ne (u_j, v_j))

주어지는 모든 입력은 정수입니다.

출력

1≤j≤N1 \le j \le N인 모든 jj에 대해 jj번 건물의 색을 rjr_j로 칠할 수 있으면 첫 줄에 YES를, 없으면 NO를 출력하세요.

YES를 출력했다면, 둘째 줄에 은하가 방문한 건물 수를, 셋째 줄에 방문한 건물 번호를 방문한 순서대로 공백으로 구분하여 출력하세요. 총 방문 횟수는 1 000 0001\,000\,000 이하여야 합니다. 이 순서로 방문했을 때 jj번 건물의 색이 rjr_j가 되어야 합니다. 칠할 수 있는 경우라면 입력 조건을 만족하는 모든 입력에 대해 1 000 0001\,000\,000번 이하의 방문으로 칠할 수 있다는 것을 증명할 수 있습니다.

예제2

  1. 예제 1

    입력
    4 6 3
    1 2 3 3
    1 2 1
    1 3 2
    1 4 3
    2 3 1
    2 4 2
    3 4 3
    
    예상 출력
    YES
    5
    4 3 4 2 1
    
  2. 예제 2

    입력
    4 2 3
    1 1 3 3
    1 2 1
    3 4 3
    
    예상 출력
    NO