class PriorityQueue():
    def __init__(self):
        self.heap = []
        self.num_node = 0

    def max_heapify(self, i):
        l = (i+1)*2-1
        r = (i+1)*2
        largest = i
        if l < self.num_node and self.heap[l] > self.heap[i]:
            largest = l
        else:
            largest = i
        if r < self.num_node and self.heap[r] > self.heap[largest]:
            largest = r

        if largest != i:
            self.heap[i], self.heap[largest] = self.heap[largest], self.heap[i]
            self.max_heapify(largest)

    def exchange(self, i):
        l = (i+1)*2-1
        r = (i+1)*2
        largest = i
        if l < self.num_node and self.heap[l] > self.heap[i]:
            largest = l
        else:
            largest = i
        if r < self.num_node and self.heap[r] > self.heap[largest]:
            largest = r

        if largest != i:
            self.heap[i], self.heap[largest] = self.heap[largest], self.heap[i]

    def insert(self, k):
        self.heap.append(k)
        i = int((self.num_node-1)/2)
        self.num_node += 1
        while i != 0:2
            self.exchange(i)
            i = int(i/2)
        self.max_heapify(i)

    def extract_max(self):
        if self.num_node == 1:
            self.num_node = 0
            return self.heap.pop()
        max_val = self.heap[0]
        self.heap[0] = self.heap.pop()
        self.num_node -= 1
        self.max_heapify(0)
        return max_val

pq = PriorityQueue()
while True:
    op = input()
    if op == 'end': break
    if op == 'extract':
        print(pq.extract_max())
    else:
        ope, num = op.split(' ')
        num = int(num)
        pq.insert(num)



### FIXED CODE ###

import sys
from heapq import heappush, heappop

# わからん
pq = []
lines = sys.stdin.readlines()
for line in lines:
    op = line.strip().split(' ')
    if op[0] == 'insert':
        heappush(pq, -int(op[1]))
    elif op[0] == 'extract':
        print(-heappop(pq))
    else:
        break

# import sys, time
#
# class PriorityQueue:
#     __slots__ = ['nodes', 'num']
#
#     def __init__(self):
#         self.nodes = []
#         self.num = 0
#
#     def max_heapify(self, i):
#         if i >= self.num: return
#         left, right = (i+1)*2-1, (i+1)*2
#
#         largest = i
#         if left < self.num and self.nodes[i] < self.nodes[left]: largest = left
#         if right < self.num and self.nodes[largest] < self.nodes[right]: largest = right
#
#         if largest != i:
#             self.nodes[i], self.nodes[largest] = self.nodes[largest], self.nodes[i]
#             self.max_heapify(largest)
#
#     def extract_max(self):
#         if self.num < 1: return
#         max = self.nodes[0]
#         self.nodes[0] = self.nodes[-1]
#         self.nodes.pop()
#         self.num -= 1
#         self.max_heapify(0)
#         return max
#
#     def insert(self, key):
#         self.nodes.append(key)
#         self.num += 1
#         i = self.num-1
#         par = lambda i: (i-1)//2
#         while i > 0 and self.nodes[par(i)] < self.nodes[i]:
#             self.nodes[i], self.nodes[par(i)] = self.nodes[par(i)], self.nodes[i]
#             i = par(i)
#
#     def print_element(self):
#         for node in self.nodes:
#             print('', node, end='')
#         print('')
#
# pq = PriorityQueue()
#
# start = time.time()
# lines = sys.stdin.readlines()
# for line in lines:
#     op = line.strip().split(' ')
#     if op[0] == 'insert':
#         pq.insert(int(op[1]))
#     elif op[0] == 'extract':
#         # print(pq.extract_max())
#         pq.extract_max()
#     else:
#         break
# print('elapsed:', time.time()-start)