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

typedef struct stack {
    int val;
    struct stack *next;
} *Stack, stack;

// 头插法入栈
void push(Stack *h, int val) {
    Stack p = *h;
    Stack s = (Stack) malloc(sizeof(stack));
    s->val = val;
    s->next = p->next;
    p->next = s;
//    printf("%d\n", p->next->val);
}

// 输出栈顶,栈顶不出栈
void top(Stack h) {
    if (h->next == NULL) {
        printf("error\n");
        return;
    }
    printf("%d\n", h->next->val);
}

// 输出栈顶,并让栈顶出栈
void pop(Stack *h) {
    Stack p = *h;
    if (p->next == NULL) {
        printf("error\n");
        return;
    }
    printf("%d\n", p->next->val);
    p->next = p->next->next;
}

int main() {

    // 新建栈头
    Stack h, s;
    h = (Stack) malloc(sizeof(stack));
    h->next = NULL;

    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) {
        char ope[10];
        scanf("%s", ope);
        if (strcmp(ope, "push") == 0) {
            int val;
            scanf("%d", &val);
            push(&h, val);
        } else if (strcmp(ope, "pop") == 0) pop(&h);
        else if (strcmp(ope, "top") == 0) top(h);
    }

    return 0;
}