#include<bits/stdc++.h>
using namespace std;
/*
*用数组来建立小根堆并完成增添,删除,输出的操作
*/
void out(int *a,int x){
int flag = 1;
for(int i = 1;i<=x;i++){
if(a[i] != 0){
if(flag)
flag = 0;
else
putchar(' ');
cout << a[i];
}
}
putchar('\n');
}
void insert(int *a,int x,int n){
for(;a[x/2] >= a[x];x/=2)//访问父亲节点是否需要更换
a[x] = a[x/2];
a[x] = n;//x即为增添后数值的最终地址
}
void de(int *a,int cnt){//传递数组与当前数组长度
if(cnt == 0)//判断数组为空
return;
a[1] = a[cnt];//将最后一位数提前到根节点,即删除根节点
a[cnt] = 0;
int i = 1;
int son = i*2;//设置初始下标与儿子下标
while(son <= cnt){
if(a[son]>a[son+1]&&a[son+1]!=0)
son++;
if(a[i] <= a[son])
break;
swap(a[i],a[son]);
i = son;//根转移
son*=2;//儿子转移
}
}
int main(){
int n,k;
int a[1001] = {0};
a[0] = INT_MIN;
cin >> n >> k;
int cnt = 1;
for(int i = 1;i <= k;i++){
int x;
cin >> x;//第一个数为1表示增添,为-1表示删除堆顶元素并更新小根堆
if(x==-1){
cnt--;
de(a,cnt);
out(a,cnt);
continue;
}
cin >> x;
a[cnt] = x;
insert(a,cnt,x);
out(a,cnt);
cnt++;
}
}