#include <iostream>
#include <map>
#include <stack>
#include <string>
#include <algorithm>
using namespace std;

bool is_digit(char c){
	return ('0' <= c && c <= '9');
}

bool is_alpha(char c){
	return ('A' <= c && c <= 'Z');
}

//string型からint型に変換する
int s_to_i(string s){
    bool flag = false;
    int n = 0;
    for(unsigned int i=0 ; i < s.size() ; ++i ){
        if( i == 0 && s[i] == '-' ){
            flag = true;
        }else if( s[i] >= '0' && s[i] <= '9' ){
            n *= 10;
            n += s[i] - '0';
        }else{
            break;
        }
    }
    return (flag)? -n : n ;
}

//int型からstring型に変換する
string i_to_s(int n){
    bool flag = false;
    string s;
    if( n < 0 ){
        flag = true;
        n *= -1;
    }
    do{
        s.push_back( (n%10)+'0' );
        n /= 10;
    }while( n != 0 );
    
    reverse( s.begin() , s.end() );
    if( flag ) 
        s.insert( s.begin() , 1 , '-' );
    return s;
}

// s[i..j] がアルファベットのみで構成されているかどうか返す.
bool is_genome(const string& s, int i, int j){
	for(int k=i ; k <= j ; k++ ){
		if( k >= s.size() ) continue;
		
		if( !is_alpha(s[k]) ){
			return false;
		}
	}
	return true;
}

int main(){
	string s;
	int k;
	while( cin >> s >> k ){
		if( s == "0" && k == 0 ) break;
		
		// 1文字の繰り返しにも括弧 '(', ')' をつける.
		for(int i=1 ; i < s.size() ; i++ ){
			if( is_digit(s[i-1]) && is_alpha(s[i]) ){
				string str;
				str.push_back('(');
				str.push_back( s[i] );
				str.push_back(')');
				s.replace( i , 1 , str );
			}
		}
		
		int f[1001], h[1001] = {0};
		bool genome[1001] = {0};
		for(int i=0 ; i < 1001 ; i++ ) f[i] = -1;
		
		// f[i] := s[i] == ')' のときの対応する'('の位置を返す. 
		// 括弧の対応を調べる.
		stack<int> st;
		for(int i=0 ; i < s.size() ; i++ ){
			if( s[i] == '(' ){
				st.push( i );
			}else if( s[i] == ')' ){
				f[i] = st.top();
				st.pop();
			}
		}
		// h[i] := s[i] == ')' の対応する繰り返し数を返す.
		for(int i=0 ; i < s.size() ; i++ ){
			if( f[i] != -1 ){
				int j = f[i];
				// num := () の前の繰り返す回数の文字列
				string num;
				for(int j_ = j-1 ; j_ >= 0 && is_digit(s[j_]) ; j_-- ){
					num.push_back( s[j_] );
				}
				reverse( num.begin() , num.end() );
				h[i] = s_to_i( num );
				// 対応する括弧の中がアルファベットのみで構成されているかどうか.
				genome[i] = is_genome( s , f[i]+1 , i-1 );
				// cout << "[" << f[i] << "] - [" << i << "] : " << h[i];
				// cout << " : " << genome[i] << endl;
			}
		}
		char ans = '0';
		int p=0;
		int cnt=0;
		while( true ){
			// debug:
			/*cout << s << endl;
			for(int i=0 ; i < p ; i++ ) cout << ' ';
			cout << '^' << endl;
			cout << "i = " << cnt << endl;*/
			
			if( s[p] == ')' ){
				int i = f[p];
				// num := () の前の繰り返す回数の文字列
				string num;
				for(int j = i-1 ; j >= 0 && is_digit(s[j]) ; j-- ){
					num.push_back( s[j] );
				}
				reverse( num.begin() , num.end() );
				int de = s_to_i(num)-1;
				string dec_num = i_to_s( de );
				string str = "0";
				
				while( dec_num.size() != num.size() ){
					dec_num = str + dec_num;
				}
				
				int N = s_to_i( num );
				if( N > 1 ){
					// skip := 飛ばせる数.
					int skip = (p - f[p] - 1) * de;
					
					// 括弧の中がアルファベットのみで繰り返しを飛ばせるときは飛ばす.
					if( genome[p] && cnt + skip < k ){
						cnt += skip;
						s.replace( i-num.size() , num.size() , i_to_s(h[p]) );
						p++;
					}else{
						p = f[p];
						s.replace( i-num.size() , num.size() , dec_num );
					}
				}else{
					s.replace( i-num.size() , num.size() , i_to_s(h[p]) );
					p++;
				}
			}else if( is_alpha(s[p]) ){
				if( cnt == k ){
					ans = s[p];
					break;
				}
				p++;
				cnt++;
			}else{
				p++;
			}
			if( p >= s.size() ) break;
		}
		cout << ans << endl;
	}
}