#include #include #include #include using namespace std; string s; int i; map s_cache, r_cache; int rec(int s_begin, int r_offset, int &s_length, int &r_length, bool includes) { map::iterator p; if (includes || ((p = s_cache.find(s_begin)) == s_cache.end())) { int si = 0, ri = 0; while (true) { if (s[s_begin + si] == '$') { break; } if (s[s_begin + si] == ')') { si++; break; } if (isalpha(s[s_begin + si])) { if (r_offset + ri == i) { return s[s_begin + si]; } si++; ri++; } if (isdigit(s[s_begin + si])) { int digit = 0; while (s[s_begin + si] != '(' && !isalpha(s[s_begin + si])) { digit *= 10; digit += s[s_begin + si] - '0'; si++; } if (s[s_begin + si] == '(') { si++; int s_length_; for (int j = 0; j < digit; j++) { int r_length_, found; found = rec(s_begin + si, r_offset + ri, s_length_, r_length_, false); if (found) { return found; } ri += r_length_; } si += s_length_; } else if (isalpha(s[s_begin + si])) { if (r_offset + ri <= i && i < r_offset + ri + digit) { return s[s_begin + si]; } ri += digit; si++; } } } s_length = si; r_length = ri; s_cache.insert(make_pair(s_begin, s_length)); r_cache.insert(make_pair(s_begin, r_length)); } else { s_length = p->second; map::iterator q = r_cache.find(s_begin); r_length = q->second; if (r_offset <= i && i < r_offset + r_length) { int found; found = rec(s_begin, r_offset, s_length, r_length, true); if (found) { return found; } } } return 0; } int main() { while (true) { cin >> s >> i; if (s == "0" && i == 0) { break; } int s_length, r_length; s_cache.clear(); r_cache.clear(); s += "$"; int found; found = rec(0, 0, s_length, r_length, true); if (found) { cout << ((char)found) << endl; } else { cout << 0 << endl; } } return 0; }