Anagrame

Time limit: 1s Memory limit: 256MB Input: anagrame.in Output: anagrame.out

Se consideră șirul de litere mici ale alfabetului englez A[1],,A[N]A[1], \ldots, A[N].

Fie succesiunea de caractere alăturate din șir A[x],A[x+1],,A[y]A[x], A[x + 1],\ldots, A[y], unde 1xyN1 \leq x \leq y \leq N, pe care o notăm cu A[x,y]A[x, y].
Pentru oricare literă mică a alfabetului englez \ell, definim range()\text{range}(\ell) ca fiind 00, dacă \ell apare cel mult o dată în A[x,y]A[x, y]. Altfel, valoarea range()\text{range}(\ell) este egală cu diferența dintre cea mai mare și cea mai mică poziție pe care litera \ell apare în A[x,y]A[x, y].
Șirul suport asociat lui A[x,y]A[x, y] este șirul de caractere minim lexicografic ce conține fiecare literă \ell de range()\text{range}(\ell) ori.

De exemplu, dacă șirul AA este șirul abdacgacd și considerăm A[3,8]=dacgacA[3, 8] = \texttt{dacgac}, atunci range(a)=52=3\text{range}(\texttt{a})=5 - 2 = 3 (pentru că, în A[3,8]A[3, 8], litera a apare pe pozițiile 22 și 55), range(c)=63=3\text{range}(\texttt{c})=6-3=3 și range()=0\text{range}(\ell) = 0 pentru toate celelalte litere {b,d,e,f,g,,z}\ell \in \{\texttt{b}, \texttt{d}, \texttt{e}, \texttt{f}, \texttt{g}, \ldots, \texttt{z}\}. Șirul suport asociat lui A[3,8]A[3, 8] este, astfel, aaaccc.

Un șir de caractere S1S_1 este o anagramă a șirului S2S_2 dacă S1S_1 este identic cu S2S_2 sau dacă S1S_1 se poate obține din S2S_2 prin schimbarea ordinii caracterelor. De exemplu, șirul de caractere tamara este o anagramă a șirului armata. Două anagrame se consideră a fi distincte dacă ele diferă în cel puțin o poziție. De exemplu, șirul de caractere aab are trei anagrame distincte: aab, aba, baa.

Asupra șirului se efectuează două tipuri de operații:

  • Actualizare: dându-se litera cc și poziția pozpoz, se înlocuiește A[poz]A[poz] cu cc.
  • Generare: dându-se perechea x,yx, y, se generează șirul suport al lui A[x,y]A[x, y].

Cerință

Problema are două cerințe, cerința de rezolvat fiind dată de C{1,2}C \in \{1, 2\}. Pentru ambele cerințe, se dau șirul AA și MM operații care se vor efectua în ordine.
Dacă C=1\bm{C = 1}: determinați șirul suport minim lexicografic dintre cele obținute în urma tuturor operațiilor de generare.
Dacă C=2\bm{C = 2}: pentru fiecare operație de generare dată, determinați numărul de anagrame distincte ale șirului suport obținut, modulo 1 999 999 9731 \ 999 \ 999 \ 973.

Date de intrare

Pe prima linie a fișierului de intrare anagrame.in se află numerele naturale CC, NN și MM, unde CC este numărul cerinței (11 sau 22), iar NN și MM au semnificația din enunț.
Pe a doua linie se află șirul AA, cele NN caractere ale sale nefiind separate prin spații. Pe fiecare dintre următoarele MM linii se află datele care descriu câte o operație:

  • O operație de actualizare este descrisă prin caracterul cc și un număr natural pozpoz, cu semnificația din enunț.
  • O operație de generare este descrisă prin perechea xx, yy de numere naturale, cu semnificația din enunț.

Valorile aflate pe aceeași linie a fișierului de intrare sunt separate prin câte un spațiu.

Date de ieșire

Fișierul de ieșire anagrame.out conține:
Dacă C=1\bm{C = 1}: pe prima linie, șirul suport minim lexicografic cerut la cerința 11.
Dacă C=2\bm{C = 2}: pentru fiecare generare câte o linie, ce conține numărul cerut în cerința 2, în ordinea corespunzătoare generărilor date.

Restricții și precizări

  • 1N,M100 0001\leq N, M \leq 100 \ 000
  • 1xyN1\leq x \leq y \leq N
  • Se garantează că, pentru oricare operație de generare din testele de evaluare, șirul suport va conține cel puțin un caracter.
  • În cadrul unei actualizări este permisă înlocuirea literei de pe poziția pozpoz cu ea însăși.
  • Șirul de caractere S[1],,S[k]S[1], \ldots, S[k] este lexicografic mai mic decât șirul T[1],,T[]T[1], \ldots, T[\ell] dacă (i)~k<k < \ell și S[i]=T[i]S[i] = T[i] pentru oricare 1ik1 \leq i \leq k, sau (ii)~există un 1imin(k,)1 \leq i \leq \min(k,\ell) astfel încât S[1]=T[1],,S[i1]=T[i1]S[1] = T[1], \ldots, S[i-1] = T[i-1] și S[i]<T[i]S[i]<T[i].
# Punctaj Restricții
1 8 C=1C=1; N10 000N \leq 10 \ 000; nu există actualizări, iar șirul AA are toate literele identice
2 16 C=1C=1; 1N,M5001 \leq N, M \leq 500
3 24 C=1C=1; N10 000N \leq 10 \ 000; nu există actualizări
4 12 C=1C=1
5 8 C=2C=2; N10 000N \leq 10 \ 000; nu există actualizări, iar șirul AA are toate literele identice
6 12 C=2C=2; yx5y-x \leq 5; 1M501\leq M \leq 50 și 1N10 0001 \leq N \leq 10 \ 000
7 8 C=2C=2; N10 000N \leq 10 \ 000; înainte de toate actualizările și după fiecare actualizare,șirul AA nu va conține alte litere în afară de a și b
8 12 C=2C=2

Exemplul 1

anagrame.in

1 5 5
abcar
b 3
1 4
r 4
r 2
2 4

anagrame.out

aaab

Explicație

După prima actualizare, șirul AA devine abbar. A doua operație este o generare. Șirul suport obținut pentru abba este aaab. După următoarele două actualizări, șirul AA devine arbrr, iar șirul suport pentru rbr corespunzător celei de a doua generări este rr. Șirul suport minim lexicografic dintre cele două obținute este aaab.

Exemplul 2

anagrame.in

2 5 5
abcar
b 3
1 4
r 4
r 2
2 4

anagrame.out

4
1

Explicație

Pentru prima generare (1,4)(1,4) șirul suport obținut este aaab, care are patru anagrame distincte: aaab, aaba, abaa, baaa. După următoarele două operații, șirul suport pentru rbr este rr, care are o singură anagramă.

Log in or sign up to be able to send submissions!