Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Transformation

Write a program which performs a sequence of commands to a given string $str$. The command is one of:

print a b: print from the a-th character to the b-th character of $str$

reverse a b: reverse from the a-th character to the b-th character of $str$

replace a b p: replace from the a-th character to the b-th character of $str$ with p

Note that the indices of $str$ start with 0.

Input

In the first line, a string $str$ is given. $str$ consists of lowercase letters. In the second line, the number of commands q is given. In the next q lines, each command is given in the above mentioned format.

Output

For each print command, print a string in a line.

Constraints

$1 \leq $ length of $str \leq 1000$

$1 \leq q \leq 100$

$0 \leq a \leq b < $ length of $str$

for replace command, $b - a + 1 = $ length of $p$

Sample Input 1

abcde
3
replace 1 3 xyz
reverse 0 2
print 1 4

Sample Output 1

xaze

Sample Input 2

xyz
3
print 0 2
replace 0 2 abc
print 0 2

Sample Output 2

xyz
abc

Solution in C (judge verdict: Accepted)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>


int main(void) {

	char str[1001] = { 0 };
	int q = 0;

	int a = 0;
	int b = 0;

	char p[1001] = { 0 };

	char result[100][1001];
	int printCount = 0;

	scanf("%1000s%*[^\n]%*c", &str);

	scanf("%d%*[^\n]%*c", &q);
	int i = 0;
	for (i = 0; i < q; i++) {
		char order[10] = { 0 };
		scanf("%s", &order);

		char tmpStr[1001] = { 0 };
		int copy_i = 0;
		for (; copy_i < strlen(str); copy_i++) {
			tmpStr[copy_i] = str[copy_i];
		}

		if (strcmp(order, "replace") == 0) {
			scanf("%d %d %s", &a, &b, &p);
			int replace_i = a;
			int replace_j = 0;
			for (; replace_i <= b; replace_i++, replace_j++) {
				str[replace_i] = p[replace_j];
			}
		}
		else {
			scanf("%d %d", &a, &b);
			if (strcmp(order, "reverse") == 0) {
				int reverse_i = a;
				int reverse_j = b;
				for (; reverse_i <= b; reverse_i++, reverse_j--) {
					str[reverse_i] = tmpStr[reverse_j];
				}
			}
			else { // print
				int print_i = 0;
				int print_j = a;
				for (; print_i < b - a + 1; print_i++, print_j++) {
					result[printCount][print_i] = str[print_j];
				}
				printCount++;

			}
		}

	}

	int output_i = 0;
	for (; output_i < printCount; output_i++) {
		printf("%s\n", result[output_i]);
	}
	return 0;
}