import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
// https://www.acmicpc.net/problem/28278
public class Main {
public static void main(String[] args) throws IOException {
// 입력 시간 줄여주기
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
ArrayDeque<Integer> stack = new ArrayDeque<>();
StringBuilder sb = new StringBuilder(); // 출력의 시간을 줄이기 위해 한 번에 출력
// System.out.println("N : " + N);
for (int i = 0; i < N; i++) {
String[] command = bf.readLine().split(" ");
// System.out.println(command[0]);
switch (command[0]) {
case "1": // push
// System.out.println("PUSH");
int X = Integer.parseInt(command[1]);
// queue.add(X);
stack.push(X);
break;
case "2": // pop
// System.out.println("POP");
// if (stack.size() == 0) {
if (stack.isEmpty()) {
sb.append(-1).append("\n");
} else {
// sb.append(queue.poll()).append("\n");
sb.append(stack.pop()).append("\n"); // **
}
break;
case "3": // size
// System.out.println("SIZE");
sb.append(stack.size()).append("\n");
break;
case "4": // empty
// System.out.println("EMPTY");
if (stack.isEmpty()) {
sb.append(1).append("\n");
} else {
sb.append(0).append("\n");
}
// sb.append(stack.isEmpty() ? 1 : 0).append("\n");
break;
case "5": // peek
// System.out.println("PEEK");
if (stack.isEmpty()) {
sb.append(-1).append("\n");
} else {
sb.append(stack.peek()).append("\n");
}
break;
}
}
System.out.print(sb);
}
}