#include <cstdio>
#include <vector>
using namespace std;
#define dim 200010
#define DBG 0
#define INF 2000000000
FILE* in = fopen("heapuri.in","r");
FILE* out = fopen("heapuri.out","w");
int Pos[dim],Arb[4*dim],i,j,n,m,q,p,x,y,val,removePos,addPos;
void _Add(int nod, int left, int right)
{
if( left == right )
{
Arb[ nod ] = val;
Pos[ addPos ] = nod;
return;
}
int middle = ( left + right ) / 2;
if( addPos <= middle )
_Add( 2 * nod , left , middle );
else
_Add( 2 * nod + 1 , middle + 1 , right);
Arb[ nod ] = min( Arb[ 2 * nod ] , Arb[ 2 * nod + 1] );
}
/*
void _Remove(int nod, int left, int right)
{
if( left == right )
{
Arb[ nod ] = INF;
return;
}
int middle = ( left + right ) / 2;
if( removePos <= middle )
_Remove( 2 * nod , left , middle );
else
_Remove( 2 * nod + 1 , middle + 1 , right );
Arb[ nod ] = min( Arb[ 2 * nod ] , Arb[ 2 * nod + 1 ] );
}
*/
void _Remove( int nod )
{
if( nod == removePos )
{
Arb[ nod ] = INF;
}
Arb[ nod ] = min( Arb[ 2 * nod ] , Arb[ 2 * nod + 1 ] );
if( nod == 1 )
{
return;
}
_Remove( nod / 2 );
}
int main()
{
fscanf(in,"%d",&n);
for(i=0 ; i<4*dim ; ++i)
Arb[ i ] = INF;
for(i=1 ; i<=n ; ++i)
{
fscanf(in,"%d",&q);
if( q == 1 )
{
fscanf(in,"%d",&val);
++addPos;
_Add( 1 , 1 , n );
}
else if( q == 2 )
{
fscanf(in,"%d",&removePos);
removePos = Pos[ removePos ];
_Remove( removePos );
}
else if( q == 3 )
{
fprintf(out,"%d\n",Arb[1]);
}
}
return 0;
}