#include <stack>
#include <map>
#include <string>
#include <iostream>
using namespace std;
// 对于每组测试数据,第一行是一个正整数 n(0 < n <= 10000)。
// 而后的 n 行,每行的第一个字符可能是'P'或者'O'或者'A';
// 如果是'P',后面还会跟着一个整数,表示把这个数据压入堆栈;
// 如果是'O',表示将栈顶的值 pop 出来,如果堆栈中没有元素时,忽略本次操作;
// 如果是'A',表示询问当前栈顶的值,如果当时栈为空,则输出'E'。堆栈开始为空。
int main() {
int n;
char op;
int num;
while (scanf("%d", &n) != EOF) {
stack<int> stack;
while (n--) {
cin >> op;
switch (op) {
case 'P':
cin >> num;
stack.push(num);
break;
case 'O':
if (!stack.empty()) {
stack.pop();
}
break;
case 'A':
if (stack.empty()) {
cout << 'E' << endl;
} else {
cout << stack.top() << endl;
}
break;
default:
break;
}
}
}
}