QOJ.ac

QOJ

時間限制: 2.0 s 記憶體限制: 2048 MB

#22846. Język profesora JAG-a

统计

Profesor JAG, badacz ciągów, opracowuje nowy język wyrażeń. Dane są liczba całkowita $N$ oraz napis $O = O_1 O_2 \cdots O_{N-1}$ składający się ze znaków + oraz |. W całym zadaniu ciąg o elementach $a_1, a_2, \ldots, a_k$ oznaczamy przez $[a_1, a_2, \ldots, a_k]$.

Rozważmy następujące wyrażenie:

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

Tutaj $O_i$ jest $i$-tym znakiem napisu wejściowego $O$ i pełni rolę operatora pomiędzy $[i]$ a $[i + 1]$.

Ponieważ priorytety operatorów nie są zdefiniowane, rozważamy wszystkie możliwe sposoby pełnego nawiasowania tego wyrażenia bez zmiany kolejności jego argumentów ani operatorów. Każde wyrażenie otrzymane w ten sposób nazywamy poprawnym wyrażeniem.

Dla każdego wyrażenia $Z$ niech $S(Z)$ oznacza zbiór ciągów reprezentowanych przez $Z$. Zbiór $S(Z)$ definiujemy rekurencyjnie w następujący sposób:

  • Jeśli $Z$ ma postać [i] dla pewnego $i$ ($1 \le i \le N$), to $S(Z)$ składa się wyłącznie z jednoelementowego ciągu $[i]$.
  • Jeśli $Z$ ma postać (X + Y), gdzie $X$ i $Y$ są odpowiednio jego lewym i prawym podwyrażeniem, to $S(Z)$ składa się ze wszystkich ciągów powstałych przez konkatenację pewnego ciągu z $S(X)$ z pewnym ciągiem z $S(Y)$. Na przykład jeśli $S(X)$ zawiera $[1, 3]$, a $S(Y)$ zawiera $[2, 4]$, to $S(Z)$ zawiera $[1, 3, 2, 4]$.
  • Jeśli $Z$ ma postać (X | Y), gdzie $X$ i $Y$ są odpowiednio jego lewym i prawym podwyrażeniem, to $S(Z) = S(X) \cup S(Y)$.

Różne poprawne wyrażenia mogą reprezentować ten sam ciąg. Wyznacz liczbę różnych ciągów reprezentowanych przez co najmniej jedno poprawne wyrażenie. Ponieważ odpowiedź może być duża, wypisz ją modulo $998\,244\,353$.

Wejście

Wejście składa się z pojedynczego przypadku testowego w następującym formacie:

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

Pierwszy wiersz zawiera liczbę całkowitą $N$ ($2 \le N \le 10^6$). Drugi wiersz zawiera napis $O$ składający się ze znaków + oraz | ($|O| = N - 1$).

Wyjście

Wypisz liczbę różnych ciągów, które mogą zostać reprezentowane, modulo $998\,244\,353$.

Przykład

Wejście 1

4
+|+

Wyjście 1

4

Wejście 2

7
||+|||

Wyjście 2

17

Wejście 3

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

Wyjście 3

1774

Uwagi

Dla pierwszego przykładu wyrażenie ma postać [1]+[2]|[3]+[4].

Poprzez dodanie nawiasów można otrzymać następujących pięć poprawnych wyrażeń:

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

Następujące cztery różne ciągi są reprezentowane przez co najmniej jedno z tych poprawnych wyrażeń:

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

Zatem odpowiedź wynosi $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.