#include #include #include #include #include #include #include using namespace std; class Node{ public: char ch; int old; int curr; vector child; bool leaf; }; Node root; istringstream sin(""); char ans; int i; void increase(Node &curr){ if(!curr.leaf){ curr.curr = curr.old; for(int i = 0; i < curr.child.size(); ++i) increase(curr.child[i]); } } bool calc(Node &n){ if(n.leaf){ --i; // cout << "calcL : " << n.ch << " : " << i << endl; if(i == 0){ ans = n.ch; return true; } } else{ while(n.curr > 0){ for(int i = 0; i < n.child.size(); ++i) if(calc(n.child[i])) return true; --n.curr; for(int i = 0; i < n.child.size(); ++i) increase(n.child[i]); } } return false; } void output(Node &node){ if(node.leaf){ cout << node.ch; } else{ cout << node.old << '('; for(int i = 0; i < node.child.size(); ++i) output(node.child[i]); cout << ')'; } } void input(Node &curr){ char ch; while(sin >> ch){ if(isdigit(ch)){ sin.putback(ch); int digit; sin >> digit; Node n; n.old = n.curr = digit; n.leaf = false; sin >> ch; if(ch == '('){ input(n); sin >> ch; assert(ch == ')'); } else if(isalpha(ch)){ Node cc; cc.ch = ch; cc.leaf = true; n.child.push_back(cc); } else{ assert(false); } curr.child.push_back(n); } else if(isalpha(ch)){ Node n; n.ch = ch; n.leaf = true; curr.child.push_back(n); } else if(ch == ')'){ sin.putback(ch); break; } else{ assert(false); } } } int main(void){ string word; while(cin >> word >> i){ if(word == "0" && i == 0) break; ++i; sin.clear(); sin.str(word); root.old = root.curr = 1; root.leaf = false; input(root); // output(root); // cout << endl; calc(root); if(root.curr == 0 && i > 0) ans = '0'; cout << ans << endl; root.child.clear(); } return 0; }