#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct stack {int zn;int num;struct stack* next ;}ST;

ST* push(ST *si,int k)
  {
    ST *newel;
    int i;

    i=si->num;
    newel=(ST*)malloc(sizeof(ST));
    newel->zn=k; newel->next=si;++i; newel->num=i;

    return newel;
  }

int pop(ST *si)
  {
   ST *delel;
   int i,j;

    {
    i = si->zn;
    delel = si;
    *si = *si->next;
    free (delel);
    }

    return i;
  }

 void clear(ST *s)
{
  ST *s1;
  while (s->num = 0)
  {
   s1 = s;
   *s = *s->next;
   free(s1);
  }
  s->num=0;
}

int main()
  {
   char c,d;
   int n;
   ST *si;

   si->next=0;
   si->num=0;

   do
   {
     c=getchar();
    while ((c!=' ') && (c!=EOF) & (c!='\n'))
      {
      d=c;
      c=getchar();
      }
     switch (d)
     {
       case 'h': scanf("%d",&n); si = push(si,n); printf("ok\n");break;
       case 'p': if (si->num!=0) {printf("%d\n",pop(si));break;} else {printf("error\n");break;};
       case 'k': if (si->num!=0) {printf("%d\n",si->zn);break;} else {printf("error\n");break;};
       case 'e': printf("%d\n",si->num);break;
       case 'r': printf("ok\n"); clear(si);break;
       case 't': printf("bye\n");break;
       default: printf("error\n");break;
     }
     if (d!='t') c=getchar();
   }
   while (d!='t');
   clear (si);

   return 0;
  }
