트리 채우기
시간 제한1초메모리 제한1024 MB
일부 정점에 1부터 N까지의 스티커가 미리 붙은 루트 트리에서 부모의 번호가 자식보다 크도록 나머지 스티커를 붙이거나 불가능함을 판별한다.
문제
번부터 번까지 총 개의 정점으로 이루어진 트리와 번부터 번까지의 서로 다른 번호가 붙어있는 개의 스티커가 주어진다. 트리는 번 정점을 루트로 한다. 심심했던 동건이는 각 정점에 스티커를 붙이려고 한다. 다만, 아무 규칙 없이 스티커를 붙이는 건 너무 시시하기 때문에 부모 정점의 스티커 번호가 자식 정점의 스티커 번호보다 크도록 붙이려고 한다.
그런데 동건이에게 악감정이 있던 원빈이는 일부 정점에 스티커를 미리 붙여버렸다. 계획이 틀어진 동건이는 크게 당황했는데, 동건이를 도와 위 규칙에 맞게 나머지 스티커를 모두 붙일 수 있는지 구해보자.
입력
첫 번째 줄에는 정점의 개수 이 주어진다. ()
두 번째 줄에는 개의 정수 , ..., 이 주어진다. 는 번 정점의 상태를 나타내는데, 인 경우는 아직 스티커를 붙이지 않은 상태를, 인 경우는 번 번호의 스티커가 붙여진 상태를 의미한다. 이상 이하의 정수는 각각 최대 한 번만 주어진다.
세 번째 줄부터 개의 줄에 걸쳐 트리의 정보를 나타내는 두 정수 , 가 공백으로 구분되어 주어지는데, 이는 번 정점과 번 정점을 잇는 간선이 존재한다는 의미이다. ()
출력
위 규칙에 맞게 스티커를 모두 붙일 수 없다면 첫 줄에 NO를 출력한다.
위 규칙에 맞게 스티커를 모두 붙일 수 있다면 첫 줄에 YES를 출력하고 둘째 줄에 개의 정점에 붙인 스티커의 번호를 공백으로 구분하여 번 정점부터 번 정점까지 순서대로 출력한다.
만약 스티커를 붙일 수 있는 방법이 여러 개라면 그중 아무거나 출력한다.