괄호 경로

각 노드에 '(' 또는 ')'가 적힌 트리에서 경로 문자열 w_{a,b}가 올바른 괄호열이 되는 순서쌍 (a,b)의 개수를 센다.

어려움9트리분할 정복누적 합DFS아직 제출이 없습니다시간 제한3초메모리 제한1024 MB

문제

은 짝이 올바르게 맞는 괄호로만 이루어진 문자열이다. 예를 들어 "()()"와 "(()())"는 식이고, ")("와 "()("는 식이 아니다. 식은 다음과 같이 귀납적으로 정의할 수 있다.

  • "()"는 식이다.
  • aa가 식이면 "(aa)"도 식이다.
  • aabb가 식이면 "abab"도 식이다.

트리11부터 nn까지 번호가 붙은 nn개의 정점과 n1n - 1개의 간선으로 이루어지며, 어느 두 정점 사이에도 경로가 정확히 하나 존재하는 구조이다. 각 정점에는 문자가 하나씩 적혀 있고, 그 문자는 여는 괄호 "(" 또는 닫는 괄호 ")"이다. 서로 다른 두 정점 aabb에 대해 wa,bw_{a,b}aa에서 bb로 가는 유일한 경로를 따라가면서 지나는 정점에 적힌 문자를 차례대로 이어 붙인 문자열이다. wa,bw_{a,b}에는 정점 aa의 문자(맨 앞)와 정점 bb의 문자(맨 뒤)도 포함된다.

wa,bw_{a,b}가 올바른 식이 되는 서로 다른 정점의 순서쌍 (a,b)(a, b)의 개수를 구하여라. wa,bw_{a,b}wb,aw_{b,a}는 서로 뒤집힌 문자열이므로 (a,b)(a, b)(b,a)(b, a)는 따로 센다.

입력

첫째 줄에 트리의 정점 수 nn이 주어진다. (1n3000001 \le n \le 300\,000)

둘째 줄에 길이가 nn인 문자열이 주어진다. 각 문자는 "(" 또는 ")"이며, jj번째 문자는 정점 jj에 적힌 문자이다.

다음 n1n - 1개의 줄에는 각각 간선으로 직접 연결된 두 정점의 번호 xxyy가 주어진다. (1x,yn1 \le x, y \le n, xyx \ne y)

출력

조건을 만족하는 순서쌍의 개수를 출력한다.