만드는 중입니다

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

트리 숨기기

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

요약
변경 가능한 정점의 번호를 다시 붙여 n과 모든 간선 끝점 번호의 XOR이 0이 되게 하는 문제입니다. 방법이 없으면 -1을 출력합니다.
난이도

보통10점 중 7점

유형
트리, 비트 연산, 구현
정답자
아직 제출이 없습니다

문제

XOR 스캐너는 정수 수열을 검사하는 장치다. 수열에 있는 모든 수의 비트 XOR 값이 00일 때에만 수열을 통과시킨다.

정점이 nn개인 트리가 있고, 각 정점에는 1부터 nn까지의 정수 번호가 붙어 있다. 이 트리를 다음 표준 형식으로 적어야 한다.

nn u1u_1 v1v_1 …\dots un−1u_{n-1} vn−1v_{n-1}

여기서 nn은 정점의 수이고, uiu_i와 viv_i는 ii번째 간선이 잇는 두 정점이다.

XOR 스캐너가 이 출력을 통과시키기를 원한다. 처음에는 통과하지 않을 수 있으므로, 일부 정점의 번호를 바꿀 수 있다. 번호를 바꾼 뒤에는 모든 정점의 번호가 1 이상 10910^9 이하의 서로 다른 정수여야 한다.

각 정점마다 번호를 바꿀 수 있는지가 정해져 있다. 번호를 바꿀 수 있는 정점의 번호를 다시 정해서(원래 번호를 그대로 둘 수도 있다) XOR 스캐너가 출력을 통과시키게 하라. 불가능하면 그렇다고 보고하라.

입력

첫 줄에 정점의 수 nn (2≤n≤1000002 \leq n \leq 100000)이 주어진다.

다음 줄에는 nn개의 정수가 주어진다. ii번째 수가 00이면 ii번 정점의 번호가 고정되어 있고, 11이면 바꿀 수 있다.

이어지는 n−1n-1개의 줄에는 간선의 양 끝점 uiu_i, viv_i (1≤ui,vi≤n1 \leq u_i, v_i \leq n)가 한 줄에 하나씩 주어진다.

출력

번호를 다시 붙인 트리가 존재하면, 문제의 형식과 같은 형식으로 출력하라. 간선의 순서와 각 간선의 양 끝점 순서는 입력과 같아야 한다. 출력하는 모든 수의 비트 XOR 값은 00이어야 한다.

불가능하면 -1 한 개만 출력하라.

예제1

  1. 예제 1

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