#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<stack>
using namespace std;
stack<char> fanz;
bool gan;
char s[110];
char ans[1001000];
int p1,p2,p3;
bool cc=1;
//bool flagp11,flagp12,flagp13;
int totyou;//右移位数
int lenl;
char check(char now,int way){//处理填充方式
if((int)now>=48 && (int)now<=57){
return now;
}
if(way==1){
char x;
if((int)now>=97 && (int)now<=122){
return now;
}else{
x=(char)(int)now+32;
return x;
}
}
if(way==2){
char x;
if((int)now>=65 && (int)now<=90){
return now;
}else{
x=(char)(int)now-32;
return x;
}
}
if(way==3){
char x;
x='*';
return x;
}
}
int tian(int t,int flag,int way,char st,char ed){//t=填充次数,flag是否逆序,way 填充方式后面判断
char cmp[10010];int totyou2=0;//填充数组的右移位数
int n;
//int dis=0;
int x,y;
x=(int)st;
y=(int)ed;
for(int i=x+1;i<y;i++){//加一是为了找到下一位
char tmp;
tmp=(char)i;//需要填充的字符
tmp=check(tmp,way);
//cout<<tmp<<endl;;
if(t){//填充次数
if(t==1){
cmp[totyou2]=tmp;
}else{
for(int j=0;j<t;j++){
cmp[totyou2+j]=tmp;
}
}
totyou2+=t;
}
//dis++;
}
if(flag){//栈实现数组翻转
// char cmp2[100010];
int longcmp=strlen(cmp);
for(int i=0;i<longcmp;i++){
fanz.push(cmp[i]);
// cmp2[i]=cmp[longcmp-i];
// cout<<"nowcmp[i]="<<cmp[i]<<endl;
// cout<<"nowcmp2[i]="<<cmp2[i]<<endl;
}
int o=0;
while(!fanz.empty()){
cmp[o]=fanz.top();
o++;
fanz.pop();
}
// for(int i=0;i<longcmp;i++){
// cmp[i]=cmp2[i];
// }
}
//puts(cmp);
//cout<<endl;
strcat(ans,cmp);
n=strlen(cmp)-1;
//cout<<"nowans=";
//puts(ans);
return n;
}
int main(){
gan=1;
cin>>p1>>p2>>p3;
if(p3==2 || p3==1){
p3-=1;
}
//tot=p2;
cin>>s;
lenl=strlen(s);
for(int i=0;i<lenl;i++){
// if(s[i]=='-' && gan){
// ans[i]=s[i];
// }
if(s[i]!='-' && cc){
gan=0;
ans[i+totyou]=s[i];
//cout<<"nows="<<s[i]<<endl;
//cout<<"nowans=";
//puts(ans);
}
//cout<<s[i]<<endl;
cc=1;
if(s[i]=='-'){
if((int)s[i-1]==((int)s[i+1]-1)){//同后继
//totyou+=1;
ans[i+totyou]=s[i+1];
totyou+=1;
//puts(ans);
//cout<<s[i]<<s[i+1]<<endl;
cc=0;
continue;
}
//totyou+=tian(p2,p3,p1);
if((int)s[i-1]>=(int)s[i+1]){//减号两边相同的情况
ans[i+totyou]=s[i];
continue;
}
totyou+=tian(p2,p3,p1,s[i-1],s[i+1]);
//cout<<"nowtotyou="<<totyou<<endl;
}
}
// int out1=strlen(ans);
//
// for(int i=0;i<out1;i++){
// cout<<ans[i];
// }
puts(ans);
//cout<<ans<<endl;
return 0;
}