#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int vis[500005];
int ans[500005];
struct node
{
	int w;
	int pos;
	bool operator <(const  node& A)const
	{
		if(A.w==w)
		{
			return A.pos>pos;
		}
		else
		{
			return w>A.w;
		}
	}
}a[500005];
multiset<node> s;
int main()
{
	int n;
	scanf("%d",&n);
	int ns=0;
	int ps=1;
	int as=0;
	for(int i=1;i<=n;i++)
	{
		int op;
		scanf("%d",&op);
		if(op==1)
		{
			ns++;
			int k;
			scanf("%d",&k);
			node tp;
			tp.pos=ns;
			tp.w=k;
			a[ns].pos=ns;
			a[ns].w=k;
			s.insert(tp);
		}
		if(op==2)
		{
			for(int j=ps;j<=ns;j++)
			{
				if(!vis[j])
				{
					vis[j]=1;
					s.erase(a[j]);
					ps=j+1;
					as++;
					ans[as]=j;
					break;
				}
			}
		}
		if(op==3)
		{
			node tp=*(s.begin());
			int j=tp.pos;
			as++;
			ans[as]=j;
			vis[j]=1;
			s.erase(tp);			
		}
	}
	for(int i=1;i<as;i++)
	{
		printf("%d ",ans[i]);
	}
	printf("%d\n",ans[as]);
	return 0;
}