Вам нужно обработать m запросов над множеством строк D. Каждый запрос одного из трёх типов:
- Добавить строку s в множество D. Гарантируется, что эта строка ранее не добавлялась в множество.
- Удалить строку s из множества D. Гарантируется, что эта строка находится в множестве D.
- Для заданной строки s найти количество вхождений строк из множества D. Если некоторая строка p из множества D имеет несколько вхождений в s вы должны посчитать их все.
Заметим, что вам требуется решить задачу в режиме online. Это значит, что вы не можете сразу считать все входные данные. Вы можете считать очередной запрос только после того как выведите ответ на последний запрос третьего типа. Используйте функции fflush в языке C++ и BufferedWriter.flush в языке Java после каждого вывода вашей программы.
Выходные данные
Для каждого запроса третьего типа выведите одно целое число c — требуемое количество вхождений в строку s.
Примеры
| № | Входные данные | Выходные данные |
|
1
|
5 1 abc 3 abcabc 2 abc 1 aba 3 abababc
|
2
2
|
|
2
|
10 1 abc 1 bcd 1 abcd 3 abcd 2 abcd 3 abcd 2 bcd 3 abcd 2 abc 3 abcd
|
3
2
1
0
|