Universal Cup Judging System

Universal Cup

Time Limit: 1.0 s Memory Limit: 256 MB Total points: 100 Hackable ✓
Statistics

В алгоритмі KMP масив next (також відомий як масив LPS — Longest Prefix Suffix — або префікс-функція) є ключовим поняттям. Для заданого рядка $S = s_1s_2\dots s_n$ довжини $n$ його масив next $next[1..n]$ визначається так, що $next[i]$ становить довжину найбільшого однакового власного префікса та власного суфікса підрядка $S[1..i]$, зокрема $next[1] = 0$. Формально він визначається так:

$$next[i] = \max_{k=0,\dots,i-1} \{k : S[1\dots k] = S[i-k+1\dots i]\}$$

Тут $S[l..r]$ визначається як підрядок, утворений символами з $l$-го по $r$-й рядка $S$. Вважається, що $\forall 1 \le i \le n$, $S[1\dots 0] = S[i+1\dots i]$, і обидва вони є порожніми рядками.

Задано масив $A[1..n]$ довжини $n$. Вам потрібно порахувати, скільки різних рядків $S$ довжини $n$ над алфавітом $\Sigma$ мають масив next, який точно дорівнює заданому масиву $A$. Розмір алфавіту дорівнює $m$. Виведіть кількість таких рядків за модулем $998\,244\,353$.

Вхідні дані

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

Для кожного набору вхідних даних:

  • Перший рядок містить два цілі числа $n$ ($2 \le n \le 10^5$) та $m$ ($1 \le m \le 10^6$), що позначають довжину заданого масиву та розмір алфавіту відповідно.
  • Другий рядок містить $n$ цілих чисел, розділених пробілами, що описують заданий масив $A$. Гарантується, що $\forall 1 \le i \le n$, $0 \le A_i \le i - 1$.

Гарантується, що загальна сума $n$ не перевищує $5 \times 10^5$, тобто $\sum n \le 5 \times 10^5$.

Вихідні дані

Для кожного набору вхідних даних виведіть один рядок з одним цілим числом, що позначає кількість рядків, які задовольняють умови, за модулем $998\,244\,353$.

Приклад

Вхідні дані

3
3 3
0 1 2
7 3
0 0 0 1 2 3 0
7 3
0 0 0 1 2 3 1

Вихідні дані

3
24
0

Примітка

Для другого набору даних у прикладі припустімо, що алфавіт $\Sigma = \{'a', 'b', 'c'\}$. $24$ рядки, які задовольняють вимоги:

abbabbb abbabbc abcabcb abcabcc acbacbb acbacbc
accaccb accaccc baabaaa baabaac bacbaca bacbacc
bcabcaa bcabcac bccbcca bccbccc caacaaa caacaab
cabcaba cabcabb cbacbaa cbacbab cbbcbba cbbcbbb

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.