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 JavaScript (judge verdict: Accepted)

//const config = { stdin: 'tmp', newline: '\r\n' }; // win
const config = { stdin: '/dev/stdin', newline: '\n' }; // linux

line = require('fs').readFileSync(config.stdin, 'ascii').trim()
	.split(config.newline).map(function (line) {
		return line.split(' ');
});
str = line.shift()[0];
line.shift();
res = line.reduce(function (prev, cur) {
	var op = cur[0], a = parseInt(cur[1]), bp1 = parseInt(cur[2]) + 1, ary;
	if (op === 'print') {
		console.log(prev.slice(a, bp1));
		return prev;
	} else if (op === 'reverse') {
		ary = prev.slice(a, bp1).split('');
		ary.reverse();
		return prev.slice(0, a) + ary.join('') + prev.slice(bp1);
	} else {
		return prev.slice(0, a) + cur[3] + prev.slice(bp1);
	}
}, str);