#include <string>
#include <vector>
using namespace std;

// 演算法 / Algorithm:
// 1) 正向掃 s，只記錄每步操作後的長度 (vector<long long>)。
//    Forward pass: store only post-op lengths.
// 2) 反向走查，把 pos 翻回去，落在某個字母步驟即為答案。
//    Backward walk: map pos back until it lands on a letter.

class Solution {
public:
    char processStr(string s, long long k) {
        int n = (int)s.size();                 // s 長度 / length of s
        vector<long long> len(n);              // vector：自動管理記憶體的動態陣列 / auto-managed dynamic array
        const long long CAP = 2'000'000'000'000'000LL; // 2e15 防溢位上限 / overflow-guard cap
        long long cur = 0;                     // 目前長度 / current length

        // ---- 正向計算長度 / forward length computation ----
        for (int i = 0; i < n; ++i) {
            char c = s[i];
            if (c >= 'a' && c <= 'z') cur += 1;            // 字母 +1 / letter +1
            else if (c == '*') { if (cur > 0) --cur; }     // '*' 非空時 -1 / remove if non-empty
            else if (c == '#') { cur *= 2; if (cur > CAP) cur = CAP; } // '#' 翻倍並夾上限 / double, clamped
            // '%' 反轉不改長度 / reverse keeps length
            len[i] = cur;                                  // 記錄 / record
        }

        long long finalLen = n ? len[n - 1] : 0;           // 最終長度 / final length
        if (k >= finalLen) return '.';                     // 超界回傳 '.' / out of bounds

        long long pos = k;                                 // 追蹤的位置 / tracked position

        // ---- 反向走查 / backward walk ----
        for (int i = n - 1; i >= 0; --i) {
            long long prevLen = i > 0 ? len[i - 1] : 0;    // 操作前長度 / length before op i
            char c = s[i];

            if (c >= 'a' && c <= 'z') {                    // 字母步驟 / letter step
                if (pos == prevLen) return c;              // 命中即回傳 / hit → answer
            } else if (c == '#') {
                if (prevLen > 0) pos %= prevLen;           // 模運算折回前半 / fold via modulo
            } else if (c == '%') {
                pos = prevLen - 1 - pos;                   // 反轉鏡射 / mirror on reverse
            }
            // c == '*' → 不影響 pos / does not affect pos
        }
        return '.';                                        // 理論上不會到這 / unreachable for valid input
    }
};
