// AOJ ALDS1_9_C Priority Queue
// 2019.8.9 bal4u

#include <stdio.h>
#include <stdlib.h>

// バッファを経ずstdinから数値を得る
#if 1
#define gc() getchar_unlocked()
#define pc(c) putchar_unlocked(c)
#else
#define gc() getchar()
#define pc(c) putchar(c)
#endif

int in() { // 非負整数の入力
	int n = 0, c = gc();
	do n = 10*n + (c & 0xf), c = gc(); while (c >= '0');
	return n;
}

void out(int n) { // 非負整数の表示（出力）
	int i;
	char b[20];

	if (!n) pc('0');
	else {
		i = 0; while (n) b[i++] = n % 10 + '0', n /= 10;
		while (i--) pc(b[i]);
	}
	pc('\n');
}

#define PQSZ 2000002  // キューの大きさ
typedef struct { int t, n, b; } PQ;
PQ *pq; int pqsz, pqmax;
int pqcmp(const void *a, const void *b);

#define PARENT(i) ((i)>>1)
#define LEFT(i)   ((i)<<1)
#define RIGHT(i)  (((i)<<1)+1)

void pqinit(int sz) {
  pqmax = sz;
  pqsz = 0;
  pq = malloc(sizeof(PQ)*sz);
}

void _heapify(int i) {
  int l, r, min;
  l = LEFT(i), r = RIGHT(i);
  if (l < pqsz && pqcmp(pq+l,pq+i)<0)
    min = l;
  else min = i;
  if (r < pqsz && pqcmp(pq+r,pq+min)<0)
    min = r;
  if (min != i) {
    PQ qt = pq[i];
    pq[i] = pq[min];
    pq[min] = qt;
    _heapify(min);
  }
}

int deq(PQ *p) {
  if (pqsz <= 0) return 0;
  *p = pq[0];
  pq[0]= pq[--pqsz];
  _heapify(0);
  return 1;
}

void enq(PQ *p) {
  int i, min;
  i = pqsz++;
  pq[i] = *p;
  while (i > 0 &&
    pqcmp(pq+(min=PARENT(i)), pq+i)>0) {
    PQ qt = pq[i];
    pq[i] = pq[min];
    pq[min] = qt;
    i = min;
  }
}

int pqcmp(const void *a, const void *b) {
	return ((PQ *)b)->t - ((PQ *)a)->t;
}

int main()
{
	int k;
    PQ p;
    
	pqinit(2000000);
	while (1) {
		if (gc() == 'e') {
			if (gc() == 'n') break;  // end
			k = 6; while (k--) gc(); // extract
			deq(&p);
			out(p.t);
		} else {
			k = 6; while (k--) gc(); // insert
			p.t = in();
			enq(&p);
		}
	}
	return 0;
}

