#include <iostream>
#include <queue>
#include <set>
#include <vector>
using namespace std;
//本题是类模板题,实质上就是操作一个多重集合
int main() {
    multiset<int> a;//定义一个多重集合
    int n{};//进行n次操作
    cin>>n;
    while(n--)
    {
        int op{};//定义操作类型
        cin>>op;
        if(op==1)//第一种,插入
        {
            int x{};
            cin>>x;
            a.insert(x);
        }

        if(op==2)//第二种,查询最小值
        {
            auto it=a.begin();//因为集合里面的数据是有序的,我们可以输出begin对应的值
            cout<<*it<<endl;
        }

        if(op==3)//第三种,查询最大值
        {
            auto it=a.end();
            it--;//原理同上,但要记得前移一位
            cout<<*it<<endl;
        }

        if(op==4)//第四种,删除一个最小值
        {
            auto it=a.begin();//对于单个数据的删除,我们只需要删除它的指针即可
            a.erase(it);
        }

        if(op==5)//第五种,删除一个最大值
        {
            auto it=a.end();
            it--;//原理同上,也要记得前移一位
            a.erase(it);
        }
    }


    return 0;
}
// 64 位输出请用 printf("%lld")