Олимпиадный тренинг

Задача . F. Разрезы диаметров


Задано целое число \(k\) и неориентированное дерево, состоящее из \(n\) вершин.

Длина простого пути (пути, в котором каждая вершина встречается не более одного раза) между некоторой парой вершин равна количеству ребер в данном пути. Диаметр дерева равен максимальной длине пути между всеми парами вершин в дереве.

Вы планируете удалить множество ребер из дерева. Когда ребра удаляются, дерево распадается на несколько меньших деревьев. Множество ребер считается корректным, если у всех полученных деревьев диаметр меньше либо равен \(k\).

Два множества ребер считаются различными, если существует такое ребро, что оно встречается только в одном из множеств.

Посчитайте количество корректных множеств ребер по модулю \(998\,244\,353\).

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

В первой строке записаны два целых числа \(n\) и \(k\) (\(2 \le n \le 5000\), \(0 \le k \le n - 1\)) — количество вершин в дереве и максимальный разрешенный диаметр, соответственно.

В каждой из следующих \(n-1\) строк содержится описание ребра: два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\), \(v \neq u\)).

Заданные ребра образуют дерево.

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

Выведите одно целое число — количество корректных множеств ребер по модулю \(998\,244\,353\).

Примечание

В первом примере диаметр заданного дерева уже меньше либо равен \(k\). Поэтому можно выбрать любое множество ребер, и в полученных деревьях диаметры будут меньше либо равны \(k\). Всего есть \(2^3\) множеств, включая пустое.

Во втором примере нужно удалить единственное ребро. Иначе диаметр будет \(1\), что больше \(0\).

Деревья для третьего и четвертого примеров:


Примеры
Входные данныеВыходные данные
1 4 3
1 2
1 3
1 4
8
2 2 0
1 2
1
3 6 2
1 6
2 4
2 6
3 6
5 6
25
4 6 3
1 2
1 5
2 3
3 4
5 6
29

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя