Universal Cup Judging System

Universal Cup

Time Limit: 2.0 s Memory Limit: 1024 MB Total points: 100 Hackable ✓
Statistics

Түбірлі ағаштардың изоморфты екенін анықтау үшін (бұл есепте ағаштар изоморфизмі туралы алдын ала білім қажет емес) жиі қолданылатын алгоритм — ағаштарды хештеу (tree hashing). Лайықты хеш-функция таңдалса, изоморфты емес түбірлі ағаштар әртүрлі хеш мәндерін беруі әбден мүмкін, бірақ хеш коллизияларынан да қашып құтылу қиын.

Хеш-функцияларды іске асырудың түрлі жолдары бар, бірақ кейбір хеш-функциялардың құрылымы аса дұрыс емес. Кішкентай 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.