홍준이와 가능한 집합

가중치가 있는 트리에서 최댓값과 최솟값의 차이가 d 이하인 연결된 공집합 아닌 정점 부분집합의 개수를 센다.

어려움8트리DFS분할 정복동적 계획법아직 제출이 없습니다시간 제한3초메모리 제한512 MB

문제

NN개의 정점으로 이루어진 트리가 있습니다. ii번 정점에는 가중치 a(i)a(i)가 붙어 있습니다. 여기에 정수 dd가 하나 주어질 때, 다음 조건을 모두 만족하는 트리의 정점 집합 SS를 "가능한 집합"이라고 합니다.

  1. SS는 공집합이 아닙니다.
  2. SS에 속한 정점은 서로 연결되어 있습니다. 즉, SS에 속한 두 정점 uuvv를 잇는 경로 위의 모든 정점이 SS에 속해야 합니다.
  3. maxuSa(u)minvSa(v)d\max_{u \in S} a(u) - \min_{v \in S} a(v) \le d

"가능한 집합" SS가 몇 개인지 세는 프로그램을 작성하세요. 답이 매우 커질 수 있으므로 109+710^9+7로 나눈 나머지를 출력합니다.

입력

첫째 줄에 ddNN이 주어집니다. (0d200000 \le d \le 20000, 1N200001 \le N \le 20000)

둘째 줄에 a(i)a(i)를 나타내는 NN개의 정수가 a(1)a(1)부터 순서대로 주어집니다. (1a(i)200001 \le a(i) \le 20000)

셋째 줄부터 N1N-1개의 줄에 걸쳐 트리의 간선을 나타내는 두 정수 uuvv가 주어집니다. (1u,vN1 \le u, v \le N)

출력

가능한 집합의 개수를 109+710^9+7로 나눈 나머지를 첫째 줄에 출력합니다.

힌트

첫 번째 예제에서 가능한 집합은 {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {3, 4}, {1, 3, 4}의 여덟 가지입니다.