Statement is not available in English language
D. Дерево навыков
ограничение по времени на тест
3.5 секунд
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

В любой стратегической игре, и в «Цивилизации» в том числе, есть множество скиллов (навыков), которые игрок может изучить и приобрести.

Каждый из $$$n$$$ навыков в «Цивилизации» обладает типом — военный, культурный, строительный, и так далее. Будем обозначать тип $$$i$$$-го навыка целым числом $$$c_i$$$. Также навыки упорядочены в подвешенное дерево — у каждого навыка есть один предшествующий ему, который необходимо изучить, чтобы получить к нему доступ. Процесс изучения навыков начинается с корня дерева — с базового навыка, изучение которого напрямую или косвенно необходимо для открытия всех остальных.

Скажем, что два навыка $$$u$$$ и $$$v$$$ похожи, если мультимножества типов навыков в их поддеревьях совпадают. Иными словами, чтобы два навыка были похожи, необходимо, чтобы в их поддеревьях было поровну навыков каждого типа.

«Цивилизация VII» еще не вышла, и разработчики проверяют различные гипотезы о том, как дерево навыков должно выглядеть. Для этого они $$$q$$$ раз выполняют переподвешивание дерева за другую вершину и вычисляют число пар похожих навыков. При переподвешивании дерева за навык $$$v$$$ он становится корневым (самым первым для изучения), а все остальные ребра дерева сохраняются, но на каких-то из них соответствующим образом меняется направление того, какой навык от какого зависит.

Для каждого из $$$q$$$ запросов переподвешивания дерева посчитайте количество неупорядоченных пар похожих навыков после выполнения запроса. «Неупорядоченные пары» означает, что пара $$$(u, v)$$$ и пара $$$(v, u)$$$ считаются за одну. Поскольку ответ может быть большим, выведите его остаток по модулю $$$10^9 + 7$$$.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка входных данных содержит одно целое число $$$t$$$ — количество наборов входных данных ($$$1 \leq t \leq 2 \cdot 10^5$$$). Далее следует описание наборов входных данных.

В первой описания набора входных данных дано целое число $$$n$$$ — количество навыков в игре ($$$2 \le n \le 2 \cdot 10^5$$$).

Во второй строке перечислены $$$n$$$ целых чисел $$$c_i$$$ — типы навыков ($$$1 \le c_i \le 10^9$$$).

В $$$i$$$-й из следующих $$$n - 1$$$ строк даны два целых числа $$$u_i$$$ и $$$v_i$$$ — номера навыков, один из которых напрямую зависит от другого ($$$1 \le u_i, v_i \le n$$$). Какой навык от какого зависит, определяется тем, какой навык выбран «корневым». Гарантируется, что структура зависимостей образует дерево.

В следующей строке дано целое число $$$q$$$ — количество запросов на переподвешивание дерева навыков $$$(1 \le q \le n$$$).

Последняя строка ввода содержит $$$q$$$ целых чисел $$$x_i$$$ — номера вершин, за которые переподвешивается дерево ($$$1 \le x_i \le n$$$).

Гарантируется, что сумма $$$n$$$ по всем наборам входных данных не превосходит $$$2 \cdot 10^5$$$.

Выходные данные

Для каждого запроса выведите в отдельной строке число пар похожих навыков по модулю $$$10^9 + 7$$$.

Система оценки

Баллы за каждую подзадачу начисляются только в случае, если все тесты для этой подзадачи и необходимых подзадач успешно пройдены.

ПодзадачаБаллыДоп. ограничения Необходимые подзадачи Информация о проверке
0примеры из условияполная
110$$$t \le 10$$$, $$$n \le 50$$$0первая ошибка
212$$$t \le 10$$$, $$$n \le 500$$$0, 1первая ошибка
312$$$c_i \le 3$$$ для всех $$$i$$$первая ошибка
417$$$c_i \le 20$$$ для всех $$$i$$$0, 3первая ошибка
525$$$q = 1$$$первая ошибка
624нет0 – 5первая ошибка
Примеры
Входные данные
1
7
1 1 2 4 3 3 4
1 2
1 3
2 4
4 5
3 6
3 7
7
1 2 3 4 5 6 7
Выходные данные
1
1
1
1
0
0
1
Входные данные
1
7
1 2 2 3 3 3 3
1 2
1 3
2 4
4 5
3 6
3 7
7
1 2 3 4 5 6 7
Выходные данные
4
3
3
3
1
1
1