rt.
#include <iostream>
using namespace std;
const int kMaxN = 1e6 + 5;
template <typename Ty>
struct Node {
Ty data, nxt;
};
template <typename Ty>
class list {
private:
Node<Ty> node[kMaxN];
int c;
public:
list() {
node[1].data = 1;
node[1].nxt = 0;
c = 1;
}
void insert(int x, Ty y) {
node[++c].data = y;
node[c].nxt = node[x].nxt;
node[x].nxt = c;
}
Ty operator[](int x) {
return node[node[x].nxt].data;
}
void erase(int x) {
node[x].nxt = node[node[x].nxt].nxt;
}
};
list<int> l;
int q, o, x, y;
int main() {
for (cin >> q; q; q--) {
cin >> o >> x;
if (o == 1) {
cin >> y;
l.insert(x, y);
} else if (o == 2) {
cout << l[x] << '\n';
} else {
l.erase(x);
}
}
return 0;
}