아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

전동차는 구간을 바꾸지 않는다

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

요약
트리와 여러 단순 경로가 주어질 때, 모든 경로를 따라 값이 순증가하도록 각 정점에 1부터 N까지의 값을 부여하고, 불가능하면 NO를 출력한다.
난이도

어려움10점 중 8점

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

문제

외곽 철도에 NN개의 역과 이들을 잇는 MM개의 구간이 있다. 두 역 사이에는 구간이 최대 하나만 존재한다. 구간망은 어떤 역에서 출발해 그 역으로 돌아오려면 적어도 하나의 구간을 두 번 지나야만 하도록 구성되어 있다. 이 철도에서는 전동차 운행이 이루어진다. 각 전동차는 두 종점 역 사이의 자기 노선을 양방향으로 운행하며 모든 중간 역에 정차한다.

승객의 편의를 위해 철도 당국은 새로운 요금 체계를 도입하기로 했다. 이 체계에서는 각 역에 정수인 요금 번호를 부여한다. 환승 없이 두 역 사이를 이동할 때의 요금은 두 역의 요금 번호 차의 절댓값으로 정해진다. 각 전동차 노선을 따라 놓인 역들의 요금 번호는 단조롭게 변해야 한다. 즉 어느 방향으로 갈 때는 엄격히 증가하고, 따라서 반대 방향으로 갈 때는 엄격히 감소해야 한다. 이로써 지나는 구간 수가 늘수록 요금이 커진다.

각 역에 요금 번호를 부여하는 프로그램을 작성하시오.

역 4개, 구간 3개: 1-4, 2-4, 3-4노선: 1-4-2, 2-4-3, 3-4-1.답: 해가 없다
역 5개, 구간 4개: 1-5, 2-5, 3-5, 4-5노선: 1-5-2, 2-5-3, 3-5-4, 4-5-1.답: 해가 있다. 예를 들어 다음과 같다.역 번호: 1 2 3 4 5요금 번호: 1 4 1 5 3참고: 서로 다른 역의 요금 번호는 같아도 된다.

입력

입력 파일의 첫째 줄에 두 정수 NN과 MM이 주어진다. NN은 역의 수 (2≤N≤100 000)(2 \le N \le 100\,000), MM은 역 사이 구간의 수 (1≤M≤N−1)(1 \le M \le N - 1)이다. 이어지는 MM개 줄에는 두 정수 a,ba, b (a≠b,1≤a≤N,1≤b≤N)(a \ne b, 1 \le a \le N, 1 \le b \le N)가 주어지며, 이는 역 aa와 역 bb 사이에 구간이 있음을 뜻한다. 그다음 별도의 줄에 양의 정수 KK가 하나 주어지며, 이는 전동차 노선의 수이다. 이어지는 KK개 줄에는 전동차 노선의 설명이 한 줄에 하나씩 주어진다. 각 설명은 전동차가 갈 수 있는 두 방향 중 하나의 순서로 놓인 노선의 모든 역 번호를 나열한 정수 수열이다. 노선 설명은 0으로 끝난다.

노선 설명에 나오는 모든 역 번호는 서로 다르다. 각 노선의 역 수는 2 이상이다. 각 전동차 노선에서 연속한 두 역은 구간으로 연결되어 있다. 모든 노선 설명에 나오는 역의 총수는 200,000을 넘지 않는다. 어떤 전동차도 지나지 않는 역과 구간이 있을 수 있다.

출력

조건을 만족하는 요금 번호 부여가 존재하지 않으면 출력 파일의 첫째 줄에 "NO"를 출력한다. 그렇지 않으면 첫째 줄에 "YES"를 출력하고, 다음 줄에 NN개의 양의 정수를 출력한다. ii번째 수는 ii번 역의 요금 번호이다. 각 역의 요금 번호는 1 이상 NN 이하이어야 한다.

해가 여러 개면 그중 아무거나 출력한다.

예제2

  1. 예제 1

    입력
    4 3
    1 4
    2 4
    3 4
    3
    1 4 2 0
    2 4 3 0
    3 4 1 0
    
    예상 출력
    NO
    
  2. 예제 2

    입력
    5 4
    1 5
    2 5
    3 5
    4 5
    4
    1 5 2 0
    2 5 3 0
    3 5 4 0
    4 5 1 0
    
    예상 출력
    YES
    1 4 1 5 3