#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;
}