#include <iostream>
#include <string>
#include <algorithm> // 用于reverse反转序列
#include <cctype> // 用于islower/isdigit/toupper
using namespace std;
int main() {
int p1, p2, p3;
string s;
cin >> p1 >> p2 >> p3 >> s;
for (int i = 0; i < s.size(); ++i) {
// 不是'-',直接输出
if (s[i] != '-') {
cout << s[i];
continue;
}
// 是'-',先判断是否满足展开条件
bool can_expand = true;
char left = s[i - 1], right = s[i + 1];
// 条件1:不在开头/结尾
if (i == 0 || i == s.size() - 1) can_expand = false;
// 条件2:两侧同类型(都是小写字母 或 都是数字)
bool is_alpha = (islower(left) && islower(right));
bool is_digit = (isdigit(left) && isdigit(right));
if (!is_alpha && !is_digit) can_expand = false;
// 条件3:右侧ASCII > 左侧
if (right <= left) can_expand = false;
// 不满足条件,直接输出'-'
if (!can_expand) {
cout << '-';
continue;
}
// 满足条件,开始展开
// 步骤1:生成中间需要填充的字符序列(如a-d的中间是b、c)
string fill_chars;
for (char ch = left + 1; ch < right; ++ch) {
fill_chars += ch;
}
// 步骤2:按p3决定顺序(正序/逆序)
if (p3 == 2) reverse(fill_chars.begin(), fill_chars.end());
// 步骤3:按p1/p2处理每个字符,输出结果
for (char ch : fill_chars) {
char out_char;
// 按p1确定填充字符的形式
if (p1 == 1) {
out_char = (is_alpha) ? ch : ch; // 字母→小写;数字→数字
} else if (p1 == 2) {
out_char = (is_alpha) ? toupper(ch) : ch; // 字母→大写;数字→数字
} else { // p1=3,统一用'*'
out_char = '*';
}
// 按p2重复输出
for (int k = 0; k < p2; ++k) {
cout << out_char;
}
}
}
return 0;
}