11773. Зберегти зв'язність


Відправити розв'язок

Бали: 100
Time limit: 2.0s
Memory limit: 500M

Author:
Problem type
Allowed languages
C++, Java, Pascal, Python

Вам задано ціле число \(N\) більше або дорівнює 2 і просте \(P\). Розглянемо граф \(G\) із \(2N\) вершинами та (\(3N-2\)) ребрами, показаними на малюнку нижче.

Точніше, ребра з’єднують вершини наступним чином, де вершини позначені як \(1, 2, \ldots, 2N\), а ребра пронумерованік \( 1, 2, \ldots, (3N- 2)\).

  • Для кожного \(1 \leq i \leq N-1\) ребро \(i\) з’єднує вершину \(i\) та вершину \(i+1\).

  • Для кожного \(1 \leq i \leq N-1\) ребро (\(N-1+i\)) сполучає вершину \(N+i\) та вершину \(N+i+1\).

  • Для кожного \(1 \leq i \leq N\) ребро (\(2N-2+i\)) з’єднує вершину \(i\) та вершину \(N+i\).

Для кожного \(i=1,2,\ldots ,N-1\) розв’яжіть таку задачу.

Знайдіть кількість способів, за модулем \(P\), щоб видалити рівно \(i\) з \(3N-2\) ребер \(G\) так, щоб отриманий граф залишався зв’язним.

Обмеження

  • \(2 \leq N \leq 3000\)
  • 9 \times на 10^8 \leq P \leq 10^9~
  • \(N\) — ціле число.
  • \(P\) є простим числом.

Формат вхідних даних

Вхідний потік містить цілі числа \(N, P\)

Числа розділяються пропуском.

Формат вихідних даних

У вихідний потік виведіть \(N-1\) ціле число, \(i\)-те з яких є відповіддю на \(i=k\). Числа розділити пропусками.

Примітка

До прикладу 1:

У випадку \(N=3\) є 7 способів, як показано нижче, щоб видалити точно одне ребро, щоб отриманий граф залишався зв’язаним.

Існує 15 способів, як показано нижче, щоб видалити точно два ребра, щоб отриманий граф залишався зв’язаним.

Виводимо 7 і 15 у такому порядку (по модулю 998244353).

Приклад вхідних даних

3 998244353

Приклад вихідних даних

7 15

Приклад вхідних даних

16 999999937

Приклад вихідних даних

46 1016 14288 143044 1079816 6349672 29622112 110569766 330377828 784245480 453609503 38603306 44981526 314279703 408855776

Коментарі

Ще немає коментарів.