#include<stdio.h>
#define NIL -1

int A[2000002];
int heap_size;
int parent(int i){
  return i/2;
}
int left(int i){
  return 2*i;
}
int right(int i){
  return 2*i+1;
}
void swap(int x,int y){
  int temp;
  temp=A[x];
  A[x]=A[y];
  A[y]=temp;
}
void maxHeapify(int i){
  int l = left(i);
  int r = right(i);
  int largest;
  if (l <= heap_size && A[l] > A[i])largest = l;
  else largest = i;
  if (r <= heap_size && A[r] > A[largest])largest = r;
  if (largest != i){
    swap(i,largest);
    maxHeapify(largest);
  }
}

void heapIncreaseKey(int i,int key){
  if (key < A[i])return;
    // then error 新しいキーは現在のキーより小さい
  A[i] = key;
  while(i > 1 && A[parent(i)] < A[i]){
    swap(i,parent(i));
    i = parent(i);
  }
}
void maxHeapInsert(int key){
  heap_size = heap_size + 1;
  A[heap_size] = -100000000;
  heapIncreaseKey(heap_size, key);
}
int heapExtractMax(){
  int max;
  if ( heap_size < 1)
    return;// error ヒープアンダーフロー
  max = A[1];
  A[1] = A[heap_size];
  heap_size = heap_size - 1;
  maxHeapify(1);
  return max;
}

/*void buildMaxHeap(){
  int i;
  for(i=heap_size/2;i!=0;i--)maxHeapify(i);
  }*/


int main(){
  int i;
  char c[10];
  int a;

  for(i=0;i<2000002;i++){
    A[i]=NIL;
  }
  for(i=1;;i++){
    scanf("%s ",c);
    //   printf("%s",c);
    if(c[0]=='i'){
      scanf("%d",&a);
      maxHeapInsert(a);
      //   printf("insert\n");
    }
    else if(c[1]=='x'){
      a=heapExtractMax();
      printf("%d\n",a);
    }
    else break;
  }
  return 0;
}
  