Олимпиадный тренинг

Задача . D. Запросы на различные символы


Вам задана строка \(s\), состоящая из строчных букв латинского алфавита и \(q\) запросов к этой строке.

Напомним, что подстрокой \(s[l; r]\) строки \(s\) называется строка \(s_l s_{l + 1} \dots s_r\). Например, подстроками «codeforces» являются «code», «force», «f», «for», но не строки «coder» и «top».

Всего существует два вида запросов:

  • \(1~ pos~ c\) (\(1 \le pos \le |s|\), \(c\) является строчной буквой латинского алфавита): заменить \(s_{pos}\) на \(c\) (присвоить \(s_{pos} := c\));
  • \(2~ l~ r\) (\(1 \le l \le r \le |s|\)): посчитать количество различных символов в подстроке \(s[l; r]\).
Входные данные

Первая строка входных данных содержит одну строку \(s\), состоящую из не более, чем \(10^5\) строчных букв латинского алфавита.

Вторая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Следующие \(q\) строк содержат запросы, по одному в строке. Каждый запрос задан в формате, описанном в условии задачи. Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

На каждый запрос второго типа выведите ответ на него — количество различных символов в подстроке, заданной в этом запросе.


Примеры
Входные данныеВыходные данные
1 abacaba
5
2 1 4
1 4 b
1 5 b
2 4 6
2 1 7
3
1
2
2 dfcbbcfeeedbaea
15
1 6 e
1 4 b
2 6 14
1 7 b
1 12 c
2 6 8
2 1 6
1 7 c
1 2 f
1 10 a
2 7 9
1 10 a
1 14 b
1 1 f
2 1 11
5
2
5
2
6

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя