Чергова задача ICPC про рядки#10825

Чергова задача ICPC про рядки

2 секунди
512 мегабайтів
Дуже складна

Вам задано рядок довжиною . Обробіть запитів наступних -х типів:

  1. Змініть -й символ рядка (тобто s_i) на ;

  2. Дайте відповідь на питання: скільки разів зустрічається як підрядок ?

    Тобто, підрахуйте кількість індексів таких, що 1 \leq i \leq n - m + 1 та s_{i} s_{i + 1} \dots, s_{i + m - 1} = p_1 p_2 \dots p_m.

Знайдіть результат кожного запиту типу 2.

Вхідні дані

Перший рядок вхідних даних містить цілих числа (1 \leq n \leq 5\times 10^4, 1 \leq q \leq 10^5).

Другий рядок вхідних даних містить рядок довжини , що складається з малих латинських літер.

Далі йдуть рядків, які мають один із наступних форматів:

  1. Якщо це запит першого типу, він містить ціле число k_i (1 \leq k_i \leq n) та символ нижнього регістру c_i. Цей запит означає заміну символу s_{k_i} на c_i

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

Гарантується, що існує принаймні один запит типу .

Гарантується, що сума довжин рядків за всіма запитами типу не перевищує 5\cdot 10^4.

Вихідні дані

Для кожної операції типу виведіть кількість входжень рядку запиту як підрядка .

Приклади

Приклад 1

Loading
Loading

Приклад 2

Loading
Loading