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

<?php

class Transformer
{
    private $target;
    private $order;
    private $params;

    public function __construct($target)
    {
        $this->target = $target;
    }

    public function order($order)
    {
        $this->order = $order;
        return $this;
    }

    public function parameters($params)
    {
        $this->params = $params;
        return $this;
    }

    public function convert()
    {
        call_user_func([$this, '_'.$this->order], $this->params);
    }

    private function _replace($params)
    {
        list($start, $end, $replaceText) = $params;
        $this->target = substr_replace($this->target, $replaceText, $start, $end - $start + 1);
    }

    private function _print($params)
    {
        list($start, $end) = $params;
        echo substr($this->target, $start, $end - $start + 1), PHP_EOL;
    }

    private function _reverse($params)
    {
        list($start, $end) = $params;

        $this->target = substr_replace(
            $this->target,
            strrev(substr($this->target, $start, $end - $start + 1)),
            $start, $end - $start + 1
        );
    }
}



$str = getStdin();
$q   = getStdin();

for ($i = 0; $i < $q; $i++) {
    $input[] = explode(' ', getStdin());
}

$transformer = new Transformer($str);

foreach ($input as $orders) {
    $transformer->order(first($orders))
        ->parameters(drop($orders, 1))
        ->convert();
}


function first($array)
{
    foreach ($array as $value) {
        return $value;
    }
}

function drop($array, $n)
{
    return array_slice($array, $n);
}

function getStdin()
{
    return trim(fgets(STDIN));
}