var
a,s:ansistring;
p1,long,p2,p3,i,j:longint;
k:boolean;
p:array[1..30000] of string;
b:string;
function pan(var x,y:char):boolean;
begin
if ((ord(x)>=48)and(ord(x)<=57)and(ord(y)>=48)and(ord(y)<=57)and(x<=y)) or
((ord(x)>=97)and(ord(x)<=122)and(ord(y)>=97)and(ord(y)<=122)and(ord(x)<=ord(y))) then
pan:=true;
end;
procedure work1;
var b1:char;
begin
b1:=b[1];
if p1=2 then if (ord(b1)>=97)and(ord(b1)<=122) then b:=chr(ord(b1)-32);
if p1=3 then b:='*';
end;
procedure work2;
var m:longint; q:string;
begin
for m:=1 to p2 do
q:=q+b;
b:=q;
end;
procedure work3;
var
i:longint; q:string;
begin
if p3=2 then for i:=length(b) downto 1 do
q:=q+b[i];
b:=q;
end;
begin
k:=false;
readln(p1,p2,p3);
readln(a);
long:=length(a);
p[1]:=a[1];
p[long]:=a[long];
for i:=2 to long-1 do
if a[i]='-' then begin
if ord(a[i-1])=ord(a[i+1]) then begin p[i]:=a[i]; continue; end;
k:=pan(a[i-1],a[i+1]);
if k=true then
if ord(a[i-1])+1=ord(a[i+1]) then continue
else begin
for j:=ord(a[i-1])+1 to ord(a[i+1])-1 do
begin
b:=chr(j);
work1;
work2;
work3;
p[i]:=p[i]+b;
end;
end;
end
else p[i]:=a[i];
for i:=1 to long do
s:=s+p[i];
writeln(s);
end.