#include<stdio.h>
#define MAX 2000000
int A[MAX];
int H;//maxヒープに必要

void swap(int *a,int *b){
  int c=*a;*a=*b;*b=c;
}
void maxHeapify(int *A,int i){
  int l = 2*i;
  int r = 2*i+1;
  int largest;
  // 左の子、自分、右の子で値が最大のノードを選ぶ
  if(l <= H && A[l] > A[i])largest = l;
  else largest = i;
  if(r <= H && A[r] > A[largest])largest = r;

  // i の子の方が値が大きい場合
  if(largest != i){
    swap(&A[i],&A[largest]); 
    maxHeapify(A,largest); // 再帰的に呼び出し
  }
}


void Insert(int x){//一番最後に新要素追加して、その後に整列
  int i;
  
  i=H;
  A[i]=x;
  while(i>=2&&A[i/2]<A[i]){
    swap(&A[i],&A[i/2]);
    i=i/2;
  }
}

int Extract(void){//maxヒープのてっぺんとる
  int max;
 
  max=A[1];
  
  A[1]=A[H--];
  maxHeapify(A,1);

  return max;
}

int main(){
  char command[7];
  int xnum;
  int i;

  while(1){
    scanf("%s",command);
    if(command[0]=='i'){
      H++;//Hうごかしちゃ　だめ
      scanf("%d",&A[H]);
      Insert(A[H]);//insert
    }
    else if(command[1]=='x'){
      printf("%d\n",Extract());//extract
    }
    else break;
  }
  return 0;
}


