import java.util.* ;
class Stack1 {
    int[] data ;//保存数据
    int size = 0 ;//栈中元素个数
    int maxSize ;//栈的最大容量
    int top = 0 ;//栈顶指针(栈顶元素索引+1)
    public Stack1(int maxSize) {//构造器
                this.maxSize = maxSize ;
        this.data = new int[maxSize] ;
    }
    public void push(int val) {//压栈操作
        if(this.size == this.maxSize) {//元素的个数已经达到栈的最大容量,不允许存储,报错
            System.out.println("error") ;
        } else {
            data[top++] = val ;//在栈顶指针的位置增加新元素,栈顶指针更新+1
            this.size++ ;//栈中元素个数更新+1
        }
    }
    public void top() {//查看栈顶元素
        if(this.size == 0) {//栈中没有元素,不允许查看,报错
            System.out.println("error") ;
        } else {
            System.out.println(data[top-1]) ;//打印栈顶的元素(注意top永远指向栈顶元素的下一个,因此top-1为栈顶元素的位置)
        }
    }
    public void pop() {//弹栈操作
        if(this.size == 0) {//栈中没有元素,不允许弹栈,报错             
                        System.out.println("error") ;
        } else {
            System.out.println(data[--top]) ;//打印栈顶元素,top指针更新-1              
            this.size-- ;//栈中元素个数更新-1
        }
    }
}
public class Main {
    public static void main(String...args) {
        Scanner scan = new Scanner(System.in) ;
        int n = Integer.parseInt(scan.nextLine()) ;//获取总的操作次数
        Stack1 s = new Stack1(n) ;//因为压栈操作的次数一定小于总的操作次数,因此将栈的容量大小设置为 n 一定保险
        while(scan.hasNextLine()) {//获取每一次操作
            String str = scan.nextLine() ;
            String arr[] = str.split(" ") ;
            if(arr[0].equals("push")) {
                s.push(Integer.parseInt(arr[1])) ;
            } else if(arr[0].equals("pop")) {
                s.pop() ;
            } else {
                s.top() ;
            }
        }
    }
}