#include<stdio.h>
#include<string.h>
#define Max_Size 100000
#define true 1
#define false 0
typedef int _bool;
typedef struct{
    int data[Max_Size];
    int top;
}Struct;

void Init_Struct(Struct *S);//初始化栈
_bool push(Struct* S,int e);//将e入栈
_bool pop(Struct* S);//栈顶出栈
void top(Struct* S);//读栈顶元素

int main(void){
    Struct S;
    Init_Struct(&S);//初始化栈S
    int n = 0;//存储题目输入的n,代表操作次数
    scanf("%d",&n);
    char str[5];//存储输入的操作名
    int x = 0;//存储入栈时将入栈的元素
    while(n > 0){
        scanf("%s",str);
        if(strcmp(str,"push") == 0){
            scanf("%d",&x);
            push(&S,x);
        }
        else if(strcmp(str,"pop") == 0){
            if(pop(&S) == false){
                printf("error\n");
            }
        }
        else if(strcmp(str,"top") == 0){
            top(&S);
        }
        n--;
        for(int i = 0; i < 4;i++){
            str[i] = ' ';
        }//将数组初始化不然影响下次输入后的比较
    }
    return 0;
}
void Init_Struct(Struct *S){
    S->top = -1;
}
_bool push(Struct* S,int e){
    if(S->top == Max_Size - 1){
        return false;//栈已满
    }

    S->top = S->top + 1;
    S->data[S->top] = e;
    return true;
}

_bool pop(Struct* S){
    if(S->top == -1){
        return false;//栈为空
    }
    printf("%d\n",S->data[S->top]);
    S->top = S->top - 1;
    return true;
}
void top(Struct* S){
    if(S->top == -1){
        //栈为空
        printf("error\n");
        return ;
    }
    printf("%d\n",(S->data[S->top]));
}