#include <stdio.h>
#include <string.h>
#define MaxSize 100000
//定义顺序栈
struct SqStack{
int top;
int data[MaxSize];
};
//初始化栈
void InitStack(struct SqStack *S){
S->top = -1;
}
//判断栈是否为空
int StackEmpty(struct SqStack S){
if(S.top == -1){
return 1;
}
else{
return 0;
}
}
//入栈
int Push(struct SqStack *S, int x){
if(S->top == MaxSize - 1){
return 0;
}
S->top ++;
S->data[S->top] = x;
return 1;
}
//出栈
int Pop(struct SqStack *S, int *x){
if(S->top == -1){
return 0;
}
*x = S->data[S->top];
S->top --;
return 1;
}
//读栈顶元素
int Query(struct SqStack *S, int *x){
if(S->top == -1){
return 0;
}
*x = S->data[S->top];
return 1;
}
//返回栈中元素数量
int size(struct SqStack *S){
return S->top + 1;
}
int main() {
struct SqStack MyStack;
InitStack(&MyStack);
int n;
scanf("%d",&n);
//for循环读取每一条指令
for(int i = 0; i < n; i ++){
char s[20] = "";
scanf("%s",s);//扫描每一行的第一个字符串
//匹配指令并执行操作
if(!strcmp(s,"push")){
int x;
scanf("%d",&x);
Push(&MyStack, x);
}
if(!strcmp(s,"pop")){
int pop_x;
int r = Pop(&MyStack, &pop_x);
if(!r){
printf("Empty\n");
}
}
if(!strcmp(s,"query")){
int x;
int r = Query(&MyStack, &x);
if(!r){
printf("Empty\n");
}
else{
printf("%d\n",x);
}
}
if(!strcmp(s,"size")){
printf("%d\n",size(&MyStack));
}
}
return 0;
}