트리 읽기

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

요약
각 정점에 1에서 9까지의 숫자가 적힌 트리에서 모든 순서쌍 (a, b)에 대해 a에서 b로 가는 경로의 숫자를 이어 붙인 값을 합해 1,000,000,007로 나눈 나머지를 구한다.
난이도

어려움10점 중 9점

유형
트리, 분할 정복, 수학, DFS
정답자
아직 제출이 없습니다

문제

정점이 VV개인 트리가 주어진다. 각 정점은 11번 정점에서부터 VV번 정점까지 번호가 붙어 있다. ii번 정점에는 11에서 99까지의 숫자 중 하나인 S_iS\_i가 적혀 있다.

트리의 aa번 정점과 bb번 정점에 대해, aa번 정점에서 bb번 정점으로 가는 최단 경로에 포함된 각 정점에 적힌 숫자를 순서대로 이어 붙여 만든 10진법 정수를 f(a,b)f(a, b)로 정의하자.

예를 들어 11, 22, 33번 정점에 적힌 수가 각각 33, 44, 11이고, 11번 정점에서 22번 정점으로 가는 최단 경로가 1→3→21 \rightarrow 3 \rightarrow 2라면, f(1,2)=314f(1, 2) = 314이다.

모든 가능한 정수 쌍 (a,b)(a, b) (1≤a,b≤V1 \le a, b \le V)에 대해, f(a,b)f(a, b)를 모두 합한 값을 1,000,000,0071\\,000\\,000\\,007로 나눈 나머지를 구하라.

입력

첫 번째 줄에 VV가 주어진다. (1≤V≤200,0001 \le V \le 200\\,000)

두 번째 줄에 S_1,⋯ ,S_VS\_1, \cdots, S\_V가 공백을 사이에 두고 주어진다. (1≤S_i≤91 \le S\_i \le 9)

세 번째 줄부터 V−1V-1개의 줄에 걸쳐 트리의 각 간선이 잇는 두 정점의 번호 xx, yy가 공백을 사이에 두고 주어진다. (1≤x,y≤V1 \le x, y \le V)

입력으로 주어지는 모든 수는 정수이다.

출력

첫 번째 줄에 답을 출력한다.

예제1

  1. 예제 1

    입력
    5
    3 1 4 1 5
    1 2
    1 3
    2 4
    2 5
    
    예상 출력
    17560