A

#include <iostream>
using namespace std;

struct Bignum {
	int len = 0, num[5005] = {0};
	void set(string s) {
		len = s.size();
		for(int i = 1; i <= len; i++) num[i] = s[len - i] - '0';
	}
	void set(long long n) {
		len = 0;
		while(n > 0) {
			num[++len] = n % 10;
			n /= 10;
		}
		if(len == 0) len++;
	}
	void print() {
		if(len == 0) cout << 0 << endl;
		len += 2000;
		while(len > 1 && num[len] == 0) len--;
		for(int i = len; i >= 1; i--) cout << num[i];
	}
};

Bignum operator+(const Bignum &a, const Bignum &b) {
	Bignum c;
	c.len = max(a.len, b.len);
	for(int i = 1; i <= c.len; i++) {
		c.num[i] += a.num[i] + b.num[i];
		c.num[i + 1] = c.num[i] / 10;
		c.num[i] %= 10;
	}
	if(c.num[c.len + 1] != 0) c.len++;
	return c;
}

Bignum operator*(const Bignum &a, const Bignum &b) {
	Bignum c;
	c.len = max(a.len, b.len);
	for(int i = 1; i <= c.len; i++) {
		for(int j = 1; j <= c.len; j++) {
			c.num[i + j] += a.num[i] * b.num[j];
			if(c.num[i + j] >= 10) {
				c.num[i + j + 1] += c.num[i + j] / 10;
				c.num[i + j] %= 10;
			}
		}
	}
	return c;
}

Bignum operator/(const Bignum &a, const int &b) {
	Bignum c;
	c.len = a.len;
	int x = 0;
	for(int i = c.len; i >= 1; i--) {
		c.num[i] = (x * 10 + a.num[i]) / b;
		x = (x * 10 + a.num[i]) % b;
	}
	while(c.len > 0 && c.num[c.len] == 0) c.len--;
	return c;
}

int main() {
	string s;
	cin >> s;
	
	Bignum n;
	n.set(s);
	
	Bignum one;
	one.set(1);
	Bignum a = n + one;
	
	Bignum x = n * a;
	x.print();
	return 0;
}

B

#include <iostream>
#include <stack>
using namespace std;

stack<int> stk;
string str[105];

int main() {
	int n;
	string y;
	cin >> n;
	for(int i = 1; i <= n; i++) {
		string s, ans = "";
		for(int i = 1; i <= 100; i++) str[i] = "";
		int p;
		cin >> s >> p;
		int cnt = 0;
		for(int j = 0; j < s.size(); j++) {
			if(s[j] == '(') {
				j++;
				stk.push(s[j] - '0');
				cnt++;
			}
			else if(s[j] == '[' || s[j] == '{') cnt++;
			else if(s[j] == ')') {
				ans = str[cnt--] + ans;
				int k = stk.top();
				stk.pop();
				for(int a = 1; a <= k; a++) ans = ans + ans;
			}
			else if(s[j] == ']') {
				ans = str[cnt--] + ans;
				for(int k = 0; k < ans.size(); k++) {
					if(ans[k] >= 'a' && ans[k] <= 'z') ans[k] = ans[k] - 'a' + 'A';
					else ans[k] = ans[k] - 'A' + 'a';
				}
			}
			else if(s[j] == '}') {
				ans = str[cnt--] + ans;
				string x = ans;
				for(int k = 0; k < ans.size(); k++) {
					x[k] = ans[ans.size() - k - 1];
				}
				ans = x;
			}
			else {
				str[cnt] = str[cnt] + s[j];
			}
		}
		y = y + ans[p - 1];
	}
	cout << y << endl;
	return 0;
}