#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;
}