#include <stdio.h>
#include <limits.h>
#define INF INT_MAX

void insert(int *,int);
void extract(int *);
void maxheapify(int *,int);
void heapincreasekey(int *,int,int);
int parent(int);
int left(int);
int right(int);
void swap(int *,int *);
int heap;

int main(){
  int A[2000000];
  int key;
  char command[10];
  while(1){
    
    scanf("%s",command);
    if(command[0]=='i'){
      scanf("%d",&key);
      insert(A,key);
    }
    else if(command[1]=='x') extract(A);
    else if(command[2]=='d'){
      break;
    }
  }

  return 0; 
}

void insert(int *A,int key){
  heap++;
  A[heap]=-INF;
  heapincreasekey(A,heap,key);
}

void extract(int *A){
  printf("%d\n",A[1]);
  swap(&A[1],&A[heap]);
  heap--;
  maxheapify(A,1);
}


void maxheapify(int *A,int i){
  int l,r,largest;
  l=left(i);
  r=right(i);
  if(l<=heap&&A[l]>A[i])
    largest=l;
  else
    largest=i;
  if(r<=heap&&A[r]>A[largest])
    largest=r;

  if(largest!=i){
    swap(&A[i],&A[largest]);
    maxheapify(A,largest);
  }
}

void heapincreasekey(int *A,int i,int key){
  A[i]=key;
  while(i>1&&A[parent(i)]<A[i]){
    swap(&A[i],&A[parent(i)]);
    i=parent(i);
  }
}


int parent(int i){
  return i/2;
}

int left(int i){
  return i*2;
}

int right(int i){
  return i*2+1;
}

void swap(int *a,int *b){
  int temp;
  temp=*a;
  *a=*b;
  *b=temp;
  return;
}

