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