Усе добре
Обмеження: 4 сек., 256 МіБ
Реп’яховiрус продовжує вирувати мiстом Моршин, заражаючи квартал за кварталом.
Для простоти уявимо, що місто складається з кварталів, деякі з яких з’єднані двосторонніми дорогами. Усього в місті є n кварталів та n−1 дорога. Також, для будь-яких двох кварталів існує послідовність доріг, які з’єднують ці два квартали.
На щастя, Моршинська міська рада точно знає як правильно боротися з вірусом. На позачерговому засіданні ради було прийнято рішення повністю перекрити k−1 дорогу, таким чином утворивши k карантинних районів. Карантинний район — така максимальна по включенню множина кварталів міста, між кожною парою яких буде існувати шлях по неперекритих дорогах.
Після консультації з місцевими імунологами, депутати дійшли висновку, що для максимальної ефективності, розміри карантинних районів повинні бути a1, a2, ..., ak. У такому випадку жителям Моршина вірус не загрожує.
Ваше завдання — знайти кількість способів перекрити k−1 дорогу, щоб досягнути бажаних розмірів карантинних регіонів. Два способи є різними, якщо перекриваються різні набори доріг. Оскільки відповідь може бути дуже великою, виведіть остачу від ділення відповіді на просте число 109+7.
Вхідні дані
У першому рядку задано два натуральні числа n та k — кількість кварталів в Моршині та кількість карантинних районів, які необхідно утворити.
У другому рядку задано k натуральних чисел ai — розміри карантинних районів.
У наступних n−1 рядках задано пари чисел ui, vi — номери кварталів які з’єднує відповідна дорога.
Вихідні дані
У єдиному рядку виведіть одне ціле число — остачу від ділення відповіді на 109+7.
Обмеження
2≤n≤105,
2≤k≤7,
1≤ai≤n,
∑ai=n,
1≤ui,vi≤n.
Приклади
Вхідні дані (stdin) | Вихідні дані (stdout) |
---|---|
6 2 5 1 1 2 1 3 1 4 4 5 4 6 | 4 |