import java.io.*;
public class Main {
private int index = -1; // 스택의 최상단 인덱스 (초기값: -1, 즉 스택이 비어있는 상태)
private int[] s = new int[10000]; // 최대 크기 10000의 스택 배열
// 🟢 push 연산: 값을 스택에 추가
public void push(int n) {
s[++index] = n; // index를 증가시킨 후 해당 위치에 값 저장
}
// 🟢 pop 연산: 스택에서 최상단 값을 제거하고 반환
public int pop() {
if (empty())
return -1; // 스택이 비어있다면 -1 반환
return s[index--]; // 최상단 값을 반환하고 index를 감소
}
// 🟢 size 연산: 스택에 있는 요소 개수 반환
public int size() {
return index + 1; // index는 0부터 시작하므로, 개수는 index + 1
}
// 🟢 empty 연산: 스택이 비었는지 여부 반환
public boolean empty() {
return index == -1; // index가 -1이면 스택이 비어있는 상태
}
// 🟢 top 연산: 스택의 최상단 값을 반환 (제거하지 않음)
public int top() {
if (empty())
return -1; // 스택이 비어있다면 -1 반환
return s[index]; // 최상단 값 반환
}
public static void main(String[] args) throws IOException {
// 🟢 빠른 입출력을 위한 BufferedReader & BufferedWriter 사용
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Main stack = new Main(); // 스택 객체 생성
int n = Integer.parseInt(br.readLine()); // 명령어 개수 입력 받기
for (int i = 0; i < n; i++) {
String cmd = br.readLine(); // 한 줄 입력 받기
// 🟢 push 연산: "push X" 형태의 입력 처리
if (cmd.startsWith("push")) { // "push"로 시작하는 문자열 확인
int x = Integer.parseInt(cmd.substring(5).trim()); // "push X"에서 X 값을 추출
stack.push(x);
}
// 🟢 pop 연산
else if (cmd.equals("pop")) {
bw.write(stack.pop() + "\n");
}
// 🟢 size 연산
else if (cmd.equals("size")) {
bw.write(stack.size() + "\n");
}
// 🟢 empty 연산
else if (cmd.equals("empty")) {
bw.write((stack.empty() ? 1 : 0) + "\n");
}
// 🟢 top 연산
else if (cmd.equals("top")) {
bw.write(stack.top() + "\n");
}
}
// 🟢 버퍼에 있는 내용을 모두 출력
bw.flush();
// 🟢 BufferedReader & BufferedWriter 닫기
br.close();
bw.close();
}
}