Рейнджеры

Ограничение по времени: 2.000 секунд

Ограничение по памяти: 100.000 мегабайт

Для срочного задания Кириллу необходимо быстро собрать команду рейнджеров по офису.

В офисе есть n кабинетов, которые соединены n − 1 коридором. Из любого кабинета можно добраться по коридорам до любого другого. Иными словами, офис представляет из себя дерево, вершины которого соответствуют кабинетам, а ребра - коридорам. В каждом кабинете сидит ровно один сотрудник, в кабинете номер v сидит сотрудник, обладающий навыком cv. Всего есть m различных навыков, пронумерованных от 1 до m.

Кирилл хочет выбрать такой отряд рейнджеров, что для каждого из m навыков в этом отряде будет хотя бы один сотрудник с таким навыком. А также, если Кирилл возьмет в отряд сотрудников из кабинетов v и u, он также обязательно возьмет в отряд всех сотрудников, которые сидят в кабинетах, расположенных на простом пути между u и v.

Помогите Кириллу вычислить количество способов, которыми он может выбрать команду для решения задачи. Так как это число может быть большим, выведите остаток от деления этого числа на 998244353.

Формат входных данных

В первой строке даны два целых числа n и m - количество кабинетов и количество различных навыков (1 ≤ n ≤ 10000, 1 ≤ m ≤ 10).

В следующей строке даны n целых чисел ci - навыки спецагентов (1 ≤ ci ≤ m).

В следующих n − 1 строках даны по два целых числа ai и bi - номера кабинетов, соединенных i-м коридором (1 ≤ ai, bi ≤ n).

Гарантируется, что офис представляет из себя дерево.

Формат выходных данных

Выведите одно целое число 竰 количество способов выбрать отряд спецагентов по модулю 998244353.

Пример

input output
3 3
1 2 3
1 2
2 3
1
4 2
1 2 2 2
1 2
1 3
1 4
7
6 3
1 2 3 1 2 3
1 2
2 3
2 4
4 5
4 6
14
Войдите, что бы отправлять решения