#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 5000001
#define INF -1000000
int parent(int);
int left(int);
int right(int);
void maxheapify(int *,int);
void buildmaxheap(int*);
void swap(int *,int *);
int heapextractmax(int *);
void heapincreasekey(int *,int,int);
void maxheapinsert(int *,int);
int H;
int main(){
  int max,A[MAX],id;
  char str[10];
  while(1){
  scanf("%s",str);
  if(strcmp(str,"end")==0)break;
  if(strcmp(str,"extract")==0)
    {
    max=heapextractmax(A);
    printf("%d\n",max);
    }
  if(strcmp(str,"insert")==0)
    {
      scanf("%d",&id);
      maxheapinsert(A,id);
    }
  }
  return 0;
}
void swap(int *p1,int *p2){
  int temp;
  temp=*p1;
  *p1=*p2;
  *p2=temp;
}
int parent(int i){
return i/2;
}
int left(int i){
  return 2*i;
}
int right(int i){
  return 2*i+1;
}
void maxheapify(int A[],int i){
  int l,r,largest;
  l=left(i);
  r=right(i);
  if(l<=H &&A[l]>A[i])largest=l;
  else largest=i;
  if(r<=H&&A[r]>A[largest])largest=r;

  if(largest!=i){
    swap(&A[i],&A[largest]);
    maxheapify(A,largest);
  }
}
void buildmaxheap(int A[]){
  int i;
  for(i=H/2;i>=1;i--){
    maxheapify(A,i);
  }
}
int heapextractmax(int A[]){
  int max;
  if(H<1){
    printf("error\n");
      exit(0);
  }
  max=A[1];
  A[1]=A[H];
  H--;
  maxheapify(A,1);
  return max;
}
void heapincreasekey(int A[],int i,int key){
  if(key<A[i]){
    printf("error1\n");
    exit(1);
  }
  A[i]=key;
  while(i>1&&A[parent(i)]<A[i]){
    swap(&A[i],&A[parent(i)]);
    i=parent(i);
  }
}
void maxheapinsert(int A[],int key){
  H++;
  A[H]=INF;
  heapincreasekey(A,H,key);
}
  
   
    
    
    
  

