{Andrei Gabriel V. BLANARU

"GRIGORE MOISIL" NATIONAL COMPUTER SCIENCE COLLEGE from BRASOV

INTERMEDIATE 5

11 GRADE

CONTEST #3}

 

var ss:string;

 

procedure l_s(s:string);

var x,cod,i:integer;

begin

  delete(s,1,3);

  val(s,x,cod);

  if x>length(ss)

    then  x:=length(ss);

  ss:=copy(ss,x+1,length(ss));

  for i:=1 to x do

    ss:=ss+'#';

end;

 

procedure r_s(s:string);

var x,cod,i:integer;

begin

  delete(s,1,3);

  val(s,x,cod);

  if x>length(ss)

    then  x:=length(ss);

  for i:=1 to x do

    ss:='#'+ss;

  ss:=copy(ss,1,length(ss)-x);

end;

 

procedure l_c(s:string);

var x,cod,i:integer;

begin

  delete(s,1,3);

  val(s,x,cod);

  x:=x mod length(ss);

  ss:=copy(ss,x+1,length(ss))+copy(ss,1,x);

end;

 

procedure r_c(s:string);

var x,cod,i:integer;

begin

  delete(s,1,3);

  val(s,x,cod);

  x:=x mod length(ss);

  ss:=copy(ss,length(ss)-x+1,x)+copy(ss,1,length(ss)-x);

end;

 

procedure m_c(s:string);

var st,l,cod,i:integer;

    save:string;

begin

  delete(s,1,3);

  val(copy(s,1,1),st,cod);

  val(copy(s,2,1),l,cod);

  save:=ss;

  ss:=copy(ss,st,l);

  if s[4]='L'

    then  l_c('   '+s[3])

    else  r_c('   '+s[3]);

  for i:=1 to l do

    save[i+st-1]:=ss[i];

  ss:=save;

end;

 

procedure rev(s:string);

var st,l,cod,i:integer;

    c:char;

begin

  delete(s,1,4);

  val(copy(s,1,1),st,cod);

  val(copy(s,2,1),l,cod);

  for i:=1 to l div 2 do

    begin

      c:=ss[i+st-1];

      ss[i+st-1]:=ss[st+l-i];

      ss[st+l-i]:=c;

    end;

end;

 

procedure prel(s:string);

var aux:string;

    i:byte;

begin

  for i:=length(s) downto 1 do

    if s[i]='/'

      then  break;

  ss:=copy(s,i+1,length(s));

  delete(s,i+1,length(s));

  repeat

    i:=pos('/',s);

    aux:=copy(s,1,i-1);

    delete(s,1,i);

    case aux[1] of

      'L':case aux[2] of

            'S':l_s(aux);

            'C':l_c(aux);

          end;

      'R':case aux[2] of

            'S':r_s(aux);

            'C':r_c(aux);

            'E':rev(aux);

          end;

      'M':m_c(aux);

    end;

  until s='';

  writeln(ss);

end;

 

procedure citire;

var s:string;

begin

  assign(input,'strings.in');

  reset(input);

  while not eof do

    begin

      readln(s);

      prel(s);

    end;

  close(input);

end;

 

begin

  assign(output,'strings.out');

  rewrite(output);

  citire;

  close(output);