#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
typedef int Status;
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Stack
{
Node *top;
}Stack;
Status Init(Stack *S)
{
if(!S)
return ERROR;
S->top=NULL;
return OK;
}
Status Empty(Stack S)
{
return !S.top;
}
Status Push(Stack *S,ElemType e)
{
Node *newnode=(Node *)malloc(sizeof(Node));
if(!newnode)
return ERROR;
newnode->data=e;
newnode->next=S->top;
S->top=newnode;
return OK;
}
Status Pop(Stack *S,ElemType *e)
{
Node *p=S->top;
*e=p->data;
S->top=p->next;
free(p);
return OK;
}
Status Destroy(Stack S,ElemType e)
{
if(!Empty(S))
Pop(&S,&e);
return OK;
}
Status GetTop(Stack S,ElemType *e)
{
if(Empty(S))
return ERROR;
*e=S.top->data;
return OK;
}
int main()
{
int n,i,e;
char a;
while((scanf("%d",&n)!=EOF))
{
if(n==0)
return 0;
Stack S;
Init(&S);
for(i=0;i<n;i++)
{
scanf("\n%c",&a);
switch(a)
{
case'P':
{
scanf("%d",&e);
Push(&S,e);
if(i==n-1)
printf("\n");
continue;
}
case'O':
{
if(!Empty(S))
Pop(&S,&e);
if(i==n-1)
printf("\n");
continue;
}
case'A':
{
if(GetTop(S,&e))
printf("%d\n",e);
else
printf("E\n");
if(i==n-1)
printf("\n");
continue;
}
}
}
Destroy(S,e);
}
return 0;
}
/**************************************************************
Problem: 2192
User: admin
Language: C
Result: Accepted
Time:12 ms
Memory:1144 kb
****************************************************************/