Universal Cup Judging System

Universal Cup

実行時間制限: 2.0 s メモリ制限: 1024 MB 満点: 100 ハック可能 ✓
統計

Щоб визначити, чи є кореневі дерева ізоморфними (у цій задачі попередніх знань про ізоморфізм дерев не потрібно), часто використовують алгоритм хешування дерев. За належної хеш-функції неізоморфні кореневі дерева з високою ймовірністю дають різні значення хешу, хоча колізій хешів також важко уникнути.

Існують різні реалізації хеш-функцій, але деякі конструкції хеш-функцій не зовсім коректні. У Маленького C є така «не дуже коректна» хеш-функція, що визначається так: нехай $sz_x$ — кількість вершин у піддереві вершини $x$, а $son_x$ — множина всіх синів вершини $x$. Для кореневого дерева з коренем $r$ його значення хешу $h(r)$ визначається як:

$$h(r) = 1 + \sum_{v \in son_r} h(v) \times f(sz_v)$$

де $f$ позначає довільне відображення з множини додатних цілих чисел у множину додатних цілих чисел, тобто $f \in \{\varphi : \mathbb{Z}^+ \to \mathbb{Z}^+\}$. Зокрема, значення хешу кореневого дерева, що складається лише з однієї вершини, дорівнює $1$.

Далі Маленький C визначає, що якщо для двох кореневих дерев за жодного вибору $f$ неможливо отримати різні значення хешу, то такі два дерева називаються нерозрізнюваними; інакше, якщо існує вибір $f$, за якого два дерева дають різні значення хешу, то такі два дерева називаються розрізнюваними.

Маленький C хоче використати цю хеш-функцію, щоб згенерувати якомога більше кореневих двійкових дерев — кореневих дерев, у яких кожна вершина має щонайбільше двох синів. Маленький C сподівається, що ви зможете обчислити максимальну кількість попарно розрізнюваних кореневих двійкових дерев, що містять $n$ вершин. Звісно, відповідь може бути дуже великою, тому Маленький C підготував для вас модуль $p$, і результат потрібно взяти за модулем $p$.

Вхідні дані

Ця задача містить декілька наборів вхідних даних. Перший рядок вхідних даних містить ціле число $T$ ($1 \le T \le 10000$), що позначає кількість наборів вхідних даних.

Для кожного набору вхідних даних вхід складається з одного рядка, що містить два цілі числа $n, p$ ($1 \le n \le 3000, 2 \le p \le 10^9 + 9$), які позначають кількість вершин у кореневому дереві та модуль, наданий Маленьким C.

Гарантується, що загальна сума $n$ за всіма наборами вхідних даних не перевищує $10000$.

Вихідні дані

Для кожного набору вхідних даних виведіть один рядок із цілим числом — результатом відповіді за модулем $p$.

Приклад

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

8
1 1000000009
5 1000000009
10 1000000009
15 1000000009
100 1000000009
150 1000000009
1000 1000000009
1500 1000000009

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

1
6
207
10904
478868953
202933416
152259136
264735211

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.