编程题
### 问题描述
本题是一道堆排序模板题。
你需要构建一个堆,可以实现如下操作:
1. `push`:将一个正整数 $x$ 插入堆中。
2. `remove`:删除堆顶元素,并将堆顶元素输出。若此时堆为空,则输出 `empty`。
3. `min`:输出堆中最小的元素。若此时堆为空,则输出 `empty`。
4. `print`:给定一个小于等于当前堆中元素的数字 $k$,你需要在一行内输出当前堆中最小的 $k$ 个元素,并将其全部删除,数据保证该操作不会在堆为空时出现。
### 输入格式
第一行输入一个整数 $n$,表示操作的数量。
接下来 $n$ 行,每行一个字符串,表示具体的操作。
### 输出格式
对于 `remove`,`min`,`print` 操作,按照题目要求进行输出。
### 样例输入
```text
8
push 4
min
remove
remove
push 3
push 7
push 2
print 2
```
### 样例输出
```text
4
empty
2 3
```
### 评测数据规模
$1 \le n \le 2\times10^5,1\le x\le 10^3$。