아귀도

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

요약
고정된 항목은 그대로 두고, 0인 자리의 값을 정할 때 조상이 자손보다 항상 앞선 순열 b의 개수를 센다.
난이도

어려움10점 중 8점

유형
트리, 조합론, 동적 계획법, DFS
정답자
아직 제출이 없습니다

문제

아귀도의 호반우들은 11번부터 NN번까지 NN개의 정점으로 이루어지고 루트가 11번 정점인 트리로부터 깨달음을 얻고자 한다.

호반우들은 11부터 NN까지의 양의 정수로 이루어진 순열에서 일부가 00으로 바뀐 수열 a_1,a_2,⋯ ,a_Na\_{1}, a\_{2}, \cdots, a\_{N}이 주어질 때, 다음 조건을 모두 만족하는 b_1,b_2,⋯ ,b_Nb\_{1}, b\_{2}, \cdots, b\_{N}의 개수를 구해야 한다.

  • b_1,b_2,⋯ ,b_Nb\_{1}, b\_{2}, \cdots, b\_{N}은 순열이다. 즉, 11부터 NN까지의 양의 정수가 한 번씩 나타나야 한다.
  • a_i>0a\_{i} > 0인 모든 ii에 대하여, b_i=a_ib\_{i} = a\_{i}이다.
  • a_i>0a\_{i} > 0인 모든 ii와 a_j=0a\_{j} = 0인 모든 jj에 대하여 b_jb\_{j}번 노드가 b_ib\_{i}번 노드의 자손이라면 j>ij > i를 만족한다.

호반우를 도와 아귀도에서 깨달음을 얻어보자.

입력

첫째 줄에 NN이 주어진다. (1≤N≤200,000)(1 \leq N \leq 200\\,000)

둘째 줄에 수열 a_1,a_2,⋯ ,a_Na\_{1}, a\_{2}, \cdots, a\_{N}이 공백을 두고 주어진다. (0≤a_i≤N;a_i=a_j⇒i=j(0 \leq a\_{i} \leq N ; a\_{i} = a\_{j} \Rightarrow i = j 또는 a_i=0)a\_{i} = 0)

셋째 줄부터 N−1N - 1개의 줄에 걸쳐 트리의 각 간선이 잇는 두 정점의 번호 u,vu, v가 공백을 두고 주어진다. (1≤u,v≤N)(1 \leq u, v \leq N)

출력

첫째 줄에 주어진 트리로 완성 가능한 b_1,b_2,⋯ ,b_Nb\_{1}, b\_{2}, \cdots, b\_{N}의 개수를 109+710^{9} + 7로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

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

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