#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct SNode {
    int Data[100000];
    int Top;
};

typedef struct SNode* stack ;


void PUSH(stack ptrs, int item) {

    ptrs->Data[++(ptrs->Top)] = item;
    return;
}

int POP(stack ptrs) {
    if (ptrs->Top == -1) {
        return -1;
    } else {
        return (ptrs->Data[(ptrs->Top)--]);
    }
}

int top(stack ptrs) {

    if (ptrs->Top == -1) {
        return -1;
    } else {
        return ptrs->Data[ptrs->Top];
    }
}


int main() {
    stack ptrs = (stack)malloc(sizeof(struct SNode));
    ptrs->Top = -1;

    int n;
    scanf("%d", &n);

    char operation[5];
    int value;

    while (n--) {
        scanf("%s", operation);

        if (strcmp(operation, "push") == 0) {
            scanf("%d", &value);
            PUSH(ptrs, value);
        } else if (strcmp(operation, "pop") == 0) {
            int guodu = -1;
            int popvalue=POP(ptrs);
            if (guodu == popvalue) {
                printf("error\n");
            } else {
                printf("%d\n", popvalue);
            }

        } else if (strcmp(operation, "top") == 0) {


            int guodu = -1;
            if (guodu == top(ptrs)) {
                printf("error\n");
            } else {
                printf("%d\n", top(ptrs));
            }
        }
    }

free(ptrs); 

}