Без имени
Вам предстоит реализовать базовые операции со строками, такие как вставка и извлечение подстроки.
В этой задаче |S| обозначает длину строки S.
Примечание: Мы не смогли придумать подходящее название для этой задачи.
Входные данные
Ваша программа будет обрабатывать один или несколько тестовых случаев. Первая строка входных данных содержит одно целое число T, количество тестовых случаев (1 ≤ T ≤ 100). Далее следуют тестовые случаи, каждый из которых начинается со строки, содержащей строку S (1 ≤ |S| ≤ 1000000). Затем идут одна или несколько строк, каждая из которых описывает одну из следующих операций, выполняемых над S (все индексы начинаются с нуля, и кавычки приведены для ясности):
"I R X" означает вставить строку R (1 ≤ |R| ≤ 1000000) в S на индекс X (0 ≤ X ≤ |S|). Если X равен |S|, это означает добавление R в конец S. Например, результат вставки xy в abc на позицию 1 будет axybc, вставка xy в abc на позицию 3 даст abcxy, а вставка xy в abc на позицию 0 приведет к xyabc.
"P X Y" означает вывести подстроку из S от X до Y включительно (0 ≤ X ≤ Y < |S|). Например, подстрока от 0 до 2 из abc это abc, а подстрока от 1 до 1 из abc это b.
"END" указывает на завершение операций для текущего тестового случая.
Строки S и R будут состоять только из строчных английских букв ('a' до 'z'), и |S| никогда не превысит 1000000 в результате операций для любого тестового случая. Также общее количество символов, которые нужно вывести для любого тестового случая, не превысит 1000000.
Примечание: Убедитесь, что вы используете быстрые операции ввода-вывода, так как входные и выходные файлы могут быть очень большими.
Выходные данные
Для каждой операции "P X Y" в вводе выведите одну строку с соответствующей подстрокой.