#include<stdio.h>
#include<stdlib.h>
#define INF 100000000;
int heapExtractMax();
void maxHeapify(int);
void buildMaxHeap();
void heapIncreaseKey(int,int);
void maxHeapInsert(int);
int length=1;
int A[2000001];

int main(){
  char order[8];
  int data,i=1;
  while(order[0]!='e'||order[1]!='n'){
    scanf("%s",order);
    
    if(order[0]=='i'){
      
      scanf("%d",&A[length]);
      maxHeapInsert(A[length]);
      buildMaxHeap();
      
    }
    else if(order[0]=='e'&&order[1]=='x')printf("%d\n" , heapExtractMax());

  }



  return 0;
}

void buildMaxHeap(){
  int i;
  for(i=length/2;i>=1;i--) maxHeapify(i);

}

void maxHeapify(int i){
  int l,r,largest,a;
  l=i*2;
  r=i*2+1;

  if(l<=length && A[l]>A[i]) largest=l;
  else largest=i;

  if(r<=length && A[r]>A[largest]) largest=r;

  if(largest!=i){
    a=A[i];
    A[i]=A[largest];
    A[largest]=a;
    maxHeapify(largest);
  } 

}

int heapExtractMax(){
  int max;
  if(length<1){ printf("error heap under flow");
      exit(1);
      }
  max=A[1];
  A[1]=A[length];
  length--;
  maxHeapify(1);

  return max;
}
void maxHeapInsert(int key){

  length++;
  A[length]=-INF;
  heapIncreaseKey(length,key);

}

void heapIncreaseKey(int i,int key){
  int a;
  if(key<A[i]){
    printf("error new kry is smaller than current key\n");
    exit(2);
  }
  A[i]=key;
  while(i>1&&A[i/2]<A[i]){
    a=A[i];
    A[i]=A[i/2];
    A[i/2]=a;
    i=i/2;
  }
  
}