#include<iostream>
#include<cstring>
using namespace std;
int main(){
//首先,需要先把参数和原来的字符串存下来
int p1 = 0, p2 = 0, p3 = 0;
cin >> p1 >> p2 >> p3;
char a[110];
char s[2];
cin.getline(s, 1);
cin.getline(a, 100);
//接下来需要判定是否展开字符串,那么,应该先找个数组存最后的字符串
char out[1000];
char *py = a;//指向原来字符串的指针
char *po = out;//指向输出字符串的指针
//接下来对应每个情况进行填充,如果后一位没有'-'号,则直接拷贝到输出字符串,如果有,再看后两位与本位的关系进行判断
while(true){//结束情况复杂内部进行判断
if(*(py + 1) != '-') *(po++) = *(py++);//此处也指明,后面我们的边界是strlen(a) - 1
else{
if(*(py + 2) <= *py) *(po++) = *(py++);
else if(*(py + 2) - *py == 1){
*po = *py;
*(po + 1) = *(py + 1);
*(po + 2) = *(py + 2);
po += 3;
py += 3;
}
else{//此处开始字符串展开操作
*(po++) = *(py++);//首先先把这个位置存了
char temp;//先对应p3,如果为1则存成左边开头,如果为2则存成右边开头
if(p3 == 1){
char temp = *(py - 1) + 1;
if(isalpha(temp)){
if(p1 == 1) temp = tolower(temp);
else if(p1 == 2) temp = toupper(temp);
}
while(tolower(temp) != tolower(*(py + 1))){
for(int i = 0; i < p2; i++){
if(p1 != 3) *(po++) = temp;
else if(p1 == 3) *(po++) = '*';
}
temp += 1;
}
*(po++) = *(py + 1);
py += 2;
}
else{
char temp = *(py + 1) - 1;
if(isalpha(temp)){
if(p1 == 1) temp = tolower(temp);
else if(p1 ==2) temp = toupper(temp);
}
while(tolower(temp) != tolower(*(py - 1))){
for(int i = 0; i < p2; i++){
if(p1 != 3) *(po++) = temp;
else if(p1 == 3) *(po++) = '*';
}
temp -= 1;
}
*(po++) = *(py + 1);
py += 2;
}
}
}
if(*py == a[strlen(a)]) break;
}
*(po) = '\0';
cout << out << endl;
}