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

Задача . D. Частичные виртуальные деревья


Каваширо Нитори — девушка, которой нравится спортивное программирование. Однажды она нашла корневое дерево из \(n\) вершин. Корень дерева был в вершине с номером \(1\). Как продвинутый автор, она сразу придумала задачу.

У Каваширо Нитори есть множество вершин \(U=\{1,2,\ldots,n\}\). За одну операцию она будет выбирать множество вершин \(T\), где \(T\) является частичным виртуальным деревом множества \(U\), и заменять множество \(U\) на \(T\).

Множество вершин \(S_1\) называется частичным виртуальным деревом множества вершин \(S_2\), если \(S_1\) — подмножество \(S_2\), \(S_1 \neq S_2\) и для любых пар вершин \(i\) и \(j\) из \(S_1\) \(\operatorname{LCA}(i,j)\) лежит внутри \(S_1\), где \(\operatorname{LCA}(x,y)\) обозначает наименьшего общего предка вершин \(x\) и \(y\) в дереве. Обратите внимание, что множество вершин может иметь много различных частичных виртуальных деревьев.

Каваширо Нитори хочет узнать для каждого возможного \(k\), если применить операцию строго \(k\) раз, сколькими способами она может получить \(U=\{1\}\) в конце? Два способа считаются различными, если существует целое число \(z\) (\(1 \le z \le k\)) такое, что после \(z\) операций множества \(U\) различаются.

Так как ответ может быть большим, найдите его по модулю \(p\). Гарантируется, что \(p\) — простое число.

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

Первая строка содержит два целых числа \(n\) и \(p\) (\(2 \le n \le 2000\), \(10^8 + 7 \le p \le 10^9+9\)). Гарантируется, что \(p\) — простое число.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n\)), обозначающих ребро между \(u_i\) и \(v_i\).

Гарантируется, что данные ребра образуют дерево.

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

Выведите единственную строку, состоящую из \(n-1\) целых чисел — ответ по модулю \(p\) для всех \(k=1,2,\ldots,n-1\).

Примечание

В первом примере при \(k=1\) единственный возможный способ следующий:

  1. \(\{1,2,3,4\} \to \{1\}\).

При \(k=2\) существуют \(6\) способов:

  1. \(\{1,2,3,4\} \to \{1,2\} \to \{1\}\);
  2. \(\{1,2,3,4\} \to \{1,2,3\} \to \{1\}\);
  3. \(\{1,2,3,4\} \to \{1,2,4\} \to \{1\}\);
  4. \(\{1,2,3,4\} \to \{1,3\} \to \{1\}\);
  5. \(\{1,2,3,4\} \to \{1,3,4\} \to \{1\}\);
  6. \(\{1,2,3,4\} \to \{1,4\} \to \{1\}\).

При \(k=3\) существуют \(6\) возможных способов:

  1. \(\{1,2,3,4\} \to \{1,2,3\} \to \{1,2\} \to \{1\}\);
  2. \(\{1,2,3,4\} \to \{1,2,3\} \to \{1,3\} \to \{1\}\);
  3. \(\{1,2,3,4\} \to \{1,2,4\} \to \{1,2\} \to \{1\}\);
  4. \(\{1,2,3,4\} \to \{1,2,4\} \to \{1,4\} \to \{1\}\);
  5. \(\{1,2,3,4\} \to \{1,3,4\} \to \{1,3\} \to \{1\}\);
  6. \(\{1,2,3,4\} \to \{1,3,4\} \to \{1,4\} \to \{1\}\).

Примеры
Входные данныеВыходные данные
1 4 998244353
1 2
2 3
1 4
1 6 6
2 7 100000007
1 2
1 3
2 4
2 5
3 6
3 7
1 47 340 854 880 320
3 8 1000000007
1 2
2 3
3 4
4 5
5 6
6 7
7 8
1 126 1806 8400 16800 15120 5040

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

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