package main

import (
	"bufio"
	"fmt"
	"os"
)

type node1 struct {
	val  int64
	next *node1
}

func initnode1() *node1 {
	return &node1{
		val:  9999,
		next: nil,
	}
}

func (this *node1) insertnode1(x int64) {
	temp := this
	if temp.next != nil && x > temp.next.val {
		for ; temp.next != nil; temp = temp.next {
			if x > temp.val && x <= temp.next.val {
				break
			}
		}
	}
	node1New := initnode1()
	node1New.val = x
	node1New.next = temp.next
	temp.next = node1New
}

func (this *node1) delenode1() {
	if this.next != nil {
		this.next = this.next.next
	}
}

func (this *node1) query() {
	if this.next != nil {
		fmt.Println(this.next.val)
	}
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, m int
	var x int64
	fmt.Fscan(reader, &n)
	head := initnode1()
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &m)
		switch m {
		case 1:
			{
				fmt.Fscan(reader, &x)
				head.insertnode1(x)
			}
		case 2:
			{
				head.query()
			}
		case 3:
			{
				head.delenode1()
			}
		default:
			{
			}
		}
	}
}