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

int main() {
	int q;

	while (scanf("%d", &q) != EOF) {//注意:多组输入
		stack<string> ch;
		ch.push("");//创建并初始化栈为空栈

		int op, k;//选项option
		string str,x;
		//之后将进行q次操作
		while (q--) {
			cin >> op;
			switch (op) {
			case 1://插入字符串str:注意这里要分清楚两个步骤——插入和入栈
				cin >> str;
				x = ch.top();//将栈顶元素拷贝一份,赋值给中间变量x,接下来对x进行处理
				x += str;//插入
				ch.push(x);//入栈
				break;
			case 2://删除记事本最后k个字符
				cin >> k;
				x = ch.top();//将栈顶元素拷贝一份,赋值给中间变量x,接下来对x进行处理
				ch.push(x.substr(0, x.length() - k));//截取字串并入栈
				break;
			case 3://输出笔记本第k个字符
				cin >> k;
				x = ch.top();//将栈顶元素拷贝一份,赋值给中间变量x,接下来对x进行处理
				cout << x[k - 1] << endl;
				break;
			case 4://撤销上一步操作
				ch.pop();//栈顶元素出栈
				break;
			default:break;
			}
		}
	}
    return 0;
}