Podciągi

시간 제한15초메모리 제한2048 MB

요약
여섯 글자 알파벳 위의 문자열에서 한 위치씩 q번 갱신한 뒤마다, 두 번 이상 나타나는 서로 다른 비어 있지 않은 부분수열의 개수를 998244353으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

유형
동적 계획법, 조합론, 문자열, 구현
정답자
아직 제출이 없습니다

문제

Dane jest słowo ss o długości nn nad alfabetem \\{a, b, c, d, e, f\\}. Na słowie tym wykonywanych zostanie qq operacji. Każda operacja polega na zamianie dokładnie jednej litery w słowie.

Rozważmy multizbiór X_sX\_s wszystkich podciągów ss, czyli słów powstających przez usunięcie pewnego podzbioru liter ze słowa ss.

Twoim zadaniem jest utrzymywać informację o liczbie różnych niepustych słów tt, które w X_sX\_s występują co najmniej dwa razy.

Dla przykładu, w ciągu ababa jest 66 takich słów:

  • Słowo a występuje w X_sX\_s trzy razy.
  • Słowo b występuje w X_sX\_s dwa razy.
  • Słowo ab występuje w X_sX\_s trzy razy (usuwając z ss litery na pozycjach 33, 44, 55; 22, 33, 55 lub 11, 22, 55).
  • Słowo ba występuje w X_sX\_s trzy razy (usuwając z ss litery na pozycjach 11, 44, 55; 11, 33, 44 lub 11, 22, 33).
  • Słowo aa występuje w X_sX\_s trzy razy (usuwając z ss litery na pozycjach 22, 44, 55; 22, 33, 44 lub 11, 22, 44).
  • Słowo aba występuje w X_sX\_s cztery razy (usuwając z ss litery na pozycjach 44, 55; 33, 44; 22, 33 lub 11, 22).

Oblicz liczbę takich słów tt w zbiorze X_sX\_s dla początkowego słowa ss oraz dla słów ss po każdej z operacji. Ponieważ liczby te mogą być dość duże, wypisz ich reszty z dzielenia przez 998,244,353998\\, 244\\, 353.

입력

W pierwszym wierszu wejścia znajdują się dwie liczby całkowite nn oraz qq (3≤n≤50,0003 ≤ n ≤ 50\\, 000, 0≤q≤50,0000 ≤ q ≤ 50\\, 000), gdzie nn oznacza długość słowa, a qq oznacza liczbę operacji.

W drugim wierszu wejścia znajduje się nn-literowe słowo złożone z małych liter alfabetu angielskiego. Ciąg ten składa się jedynie z liter od a do f.

W kolejnych qq wierszach znajdują się opisy operacji. Każdy opis składa się z liczby całkowitej p_ip\_i (1≤p_i≤n1 ≤ p\_i ≤ n) oraz litery z_iz\_i (z\_i ∈ \\{a, b, c, d, e, f\\}) i oznacza zamianę litery na pozycji p_ip\_i w słowie s na literę z_iz\_i.

출력

Na wyjściu powinno znaleźć się q+1q + 1 wierszy; w ii-tym wierszu powinna znaleźć się jedna liczba całkowita: liczba różnych słów tt, które występują co najmniej dwa razy jako podciąg słowa ss. Wszystkie wyniki należy podać modulo 998,244,353998\\, 244\\, 353.

힌트

Wyjaśnienie przykładu: Oto stan słowa s po kolejnych aktualizacjach oraz słów tt, które występują jako podciąg ss przynajmniej dwa razy:

  • słowo: abca, podciągi: \\{a\\},
  • słowo: abca, podciągi: \\{a\\},
  • słowo: abcd, podciągi: \\{\\},
  • słowo: accd, podciągi: \\{ac, acd, cd, c\\}.

예제1

  1. 예제 1

    입력
    4 3
    abca
    1 a
    4 d
    2 c
    
    예상 출력
    1
    1
    0
    4