QOJ.ac

QOJ

実行時間制限: 2.0 s メモリ制限: 2048 MB

#22846. Мова професора JAG

統計

Професор JAG, дослідник послідовностей, розробляє нову мову виразів. Вам дано ціле число $N$ та рядок $O = O_1 O_2 \cdots O_{N-1}$, що складається із символів + та |. Протягом усієї задачі послідовність з елементами $a_1, a_2, \ldots, a_k$ позначається як $[a_1, a_2, \ldots, a_k]$.

Розглянемо такий вираз:

$$[1]\ O_1\ [2]\ O_2\ \ldots\ O_{N-1}\ [N]$$

Тут $O_i$ — $i$-й символ вхідного рядка $O$, який використовується як оператор між $[i]$ та $[i + 1]$.

Оскільки пріоритет операторів не визначено, ми розглядаємо всі можливі способи повністю розставити дужки в цьому виразі, не змінюючи порядок операндів та операторів. Кожен отриманий у такий спосіб вираз називається коректним виразом.

Для кожного виразу $Z$ позначимо через $S(Z)$ множину послідовностей, які задаються виразом $Z$. Множина $S(Z)$ визначається рекурсивно таким чином:

  • Якщо $Z$ має вигляд [i] для деякого $i$ ($1 \le i \le N$), то $S(Z)$ складається лише з одноелементної послідовності $[i]$.
  • Якщо $Z$ має вигляд (X + Y), де $X$ і $Y$ — його лівий і правий підвирази, то $S(Z)$ складається з усіх послідовностей, які отримуються конкатенацією деякої послідовності з $S(X)$ та деякої послідовності з $S(Y)$. Наприклад, якщо $S(X)$ містить $[1, 3]$, а $S(Y)$ містить $[2, 4]$, то $S(Z)$ містить $[1, 3, 2, 4]$.
  • Якщо $Z$ має вигляд (X | Y), де $X$ і $Y$ — його лівий і правий підвирази, то $S(Z) = S(X) \cup S(Y)$.

Різні коректні вирази можуть задавати одну й ту саму послідовність. Знайдіть кількість різних послідовностей, що задаються принаймні одним коректним виразом. Оскільки відповідь може бути великою, виведіть її за модулем $998\,244\,353$.

Вхідні дані

Вхідні дані складаються з одного тестового випадку в такому форматі:

$$\begin{aligned} &N \\ &O \end{aligned}$$

Перший рядок містить ціле число $N$ ($2 \le N \le 10^6$). Другий рядок містить рядок $O$, що складається із символів + та | ($|O| = N - 1$).

Вихідні дані

Виведіть кількість різних послідовностей, які можуть бути представлені, за модулем $998\,244\,353$.

Приклади

Вхідні дані 1

4
+|+

Вихідні дані 1

4

Вхідні дані 2

7
||+|||

Вихідні дані 2

17

Вхідні дані 3

17
+|||+|+++||||+|+

Вихідні дані 3

1774

Примітка

У першому прикладі вираз має вигляд [1]+[2]|[3]+[4].

Додаванням дужок можна отримати такі п'ять коректних виразів:

  • ((([1]+[2])|[3])+[4])
  • (([1]+[2])|([3]+[4]))
  • (([1]+([2]|[3]))+[4])
  • ([1]+(([2]|[3])+[4]))
  • ([1]+([2]|([3]+[4])))

Такі чотири різні послідовності задаються принаймні одним із цих коректних виразів:

  • $[1, 2]$
  • $[1, 2, 4]$
  • $[1, 3, 4]$
  • $[3, 4]$

Отже, відповідь дорівнює $4$.

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#2905EditorialOpenNew Editorial for Problem #22846louyuxuanView

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.