超级大摸你,决定从头遍历到尾,遇到合法的'-'进入solve处理,注意'-'在开头和结尾都不合法,两边类型不同也不合法,然后对合法情况下的特殊情况进行处理即可。

#define rep(i,a,b) for(int i=a;i<=b;i++) 
#define dep(i,a,b) for(int i=a;i>=b;i--)
#define endl '\n'
using namespace std;
using ll=long long;
using ull=unsigned long long;
using PII=pair<int,int>;
using PIS=pair<int,string>;
const int N=2e5+10;
ull p1,p2,p3;
string s;
vector<char>ans;

bool check(ull x){
	if(x==s.size()-1)return 0;
	if(x==0)return 0;
	else if(s[x+1]>='a'&&s[x+1]<='z'&&ans.back()>='a'&&ans.back()<='z')
		    return 1;
	else if(s[x+1]>='0'&&s[x+1]<='9'&&ans.back()>='0'&&ans.back()<='9')
		return 1;
	return 0;
	
	
}


void solve(ull k){
		if(p3==1){
			if(p1==1){
				char goal=ans.back();
		       for(char x=goal+1;x<s[k+1];x++){
				   rep(i,1,p2){
					   ans.push_back(x);
				   }
			   }	
			}
			else if(p1==2){
				char goal=ans.back();
				if(s[k+1]>='a'&&s[k+1]<='z'){
					for(char x=goal-31;x<s[k+1]-32;x++){
						rep(i,1,p2){
							ans.push_back(x);
						}
					}
				}
				else{
					char goal=ans.back();
					for(char x=goal+1;x<s[k+1];x++){
						rep(i,1,p2){
							ans.push_back(x);
						}
					}
				}
			}
			else if(p1==3){
				int cnt=(s[k+1]-ans.back()-1)*p2;
				rep(i,1,cnt)ans.push_back('*');
			}
		}
		else if(p3==2){
			if(p1==1){
				char goal=ans.back();
				for(char x=s[k+1]-1;x>goal;x--){
					rep(i,1,p2){
						ans.push_back(x);
					}
				}	
			}
			else if(p1==2){
				if(s[k+1]>='a'&&s[k+1]<='z'){
					char goal=ans.back();
					for(char x=s[k+1]-33;x>goal-32;x--){
						rep(i,1,p2){
							ans.push_back(x);
						}
					}
				}
				else{
					char goal=ans.back();
					for(char x=s[k+1]-1;x>goal;x--){
						rep(i,1,p2){
							ans.push_back(x);
						}
					}
				}
			}
			else if(p1==3){
				int cnt=(s[k+1]-ans.back()-1)*p2;
				rep(i,1,cnt)ans.push_back('*');
			}
		}
		
		
	}
	


int main(){
	ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
    cin>>p1>>p2>>p3;
	cin>>s;
	ull l=0;
	while(l<s.size()){
		if(s[l]!='-'){
			ans.push_back(s[l]);
			l++;
			continue;
		}
		else {
			if(check(l)){
				if(s[l+1]<=ans.back()){
					ans.push_back('-');
					ans.push_back(s[l+1]);
					l+=2;
				}
				else if(s[l+1]==ans.back()+1){
					ans.push_back(s[l+1]);
					l+=2;
				}
				else{
					solve(l);
					ans.push_back(s[l+1]);
					l+=2;
				}
				
			}
			else{
				ans.push_back('-');
				l++;
				
			}
		}
	}
	for(char x:ans)cout<<x;
	return 0;
}