De ziua lui, Florin a primit un șir de caractere periodic și infinit. Perioada lui are lungime și conține doar litere mici ale alfabetului englez.
Deoarece este curios, el vrea să își personalizeze șirul primit în diverse moduri. Pentru a face asta, el vă dă operații care se realizează pe șirul dat, operații de două tipuri, după cum urmează:
1 x y
: Litera de pe poziția devine egală cu , unde este o literă mică a alfabetului englez.2 a b c
: Florin vrea să afle câte litere egale cu există între pozițiile din șirul de caractere.
Fiindcă nu vrea să strice periodicitatea șirului foarte mult, Florin vă garantează că pentru toate operațiile de actualizare, valorile pozițiilor modificate au în reprezentarea binară cel mult biți egali cu .
Cerință
Scrieţi un program care, dându-se șirul de caractere și actualizările, răspunde la interogări.
Date de intrare
Fişierul de intrare perioade.in
conține pe prima linie și , reprezentând lungimea perioadei șirului de caractere, respectiv numărul maxim de biți de pe care îl are o poziție modificată la operația de tipul .
Pe cea de-a doua linie se va citi perioada șirului de caractere inițial.
Pe cea de-a treia linie se va citi , reprezentând numărul de operații făcut de Florin.
Pe următoarele linii se vor citi operațiile, care respectă descrierea din enunț.
Date de ieșire
Fişierul de intrare perioade.out
va conține răspunsurile pentru operațiile de tipul , câte un răspuns pe fiecare linie, în ordinea în care sunt date în datele de intrare.
Restricții și precizări
- ;
- ;
- Pentru toate query-urile, , . Pozițiile modificate au cel mult biți egali cu ;
- Pentru puncte, și ;
- Pentru de puncte, , ;
- Pentru puncte, ;
- Pentru de puncte, nu există restricții suplimentare.
Exemplu
perioade.in
3 4
bun
11
1 9 a
1 7 a
2 3 11 n
1 4 x
2 7 13 b
1 6 o
1 12 b
1 8 r
2 1 15 u
1 7 b
2 3 12 b
perioade.out
2
2
4
3
Explicație
- Înainte de operații, șirul este
bunbunbunbunbunbun...
- După primele două actualizări, șirul devine
bunbunauabunbunbun...
- Pentru prima operație de tipul , avem litera pe pozițiile și .
- După următoarea actualizare, șirul devine
bunxunauabunbunbun...
- Pentru cea de-a doua operație de tipul , vom avea litera pe pozițiile și .
- După următoarele trei actualizări, șirul devine
bunxuoarabubbunbun...
- Pentru cea de-a treia operație de tipul , vom avea litera pe pozițiile , , și .
- După următoarea actualizare, șirul devine
bunxuobrabubbunbun...
- Pentru ultima operație de tipul , vom avea litera pe pozițiile , și .