루트 없는 트리의 모든 노드를 겹치지 않는 경로들로 나누되 각 경로의 노드 합이 0 이상이 되도록 하는 분해의 수를 10^9+7로 나눈 나머지를 구한다.
루트가 없는 트리가 주어진다. 각 노드에는 정수가 하나씩 쓰여 있다.
트리를 경로의 집합으로 분해하는 방법의 수를 구하는 프로그램을 작성하시오. 분해는 다음 두 조건을 지켜야 한다.
여기서 경로는 트리의 간선을 따라 노드를 일렬로 이은 부분 그래프이고, 노드 하나짜리 경로도 경로로 센다. 노드를 묶은 결과가 다르면 서로 다른 분해다.
첫째 줄에 노드의 개수 NNN이 주어진다 (1≤N≤1051 \le N \le 10^51≤N≤105). 둘째 줄에는 1번 노드부터 NNN번 노드까지 각 노드에 쓰여 있는 정수가 순서대로 주어진다. 각 정수의 절댓값은 10410^4104 이하이다.
셋째 줄부터 N−1N-1N−1개의 줄에는 간선으로 이어진 두 노드의 번호가 주어진다. 주어지는 그래프는 항상 트리이다.
첫째 줄에 조건을 만족하는 분해 방법의 수를 109+710^9+7109+7로 나눈 나머지를 출력한다.
첫 번째 예제에서는 네 가지 분해가 가능하다.