Cod sursa(job #869045)
type pnod=^nod;
nod=record
info:longint;
dr:pnod;
end;
var a:array[1..1000001] of PNOD;
c:byte;n,j:integer;d,i:longint; t:boolean;
f,g:text;
procedure adaugare(e:longint);
var d:pnod;
begin
new(d);
d^.dr:=a[i];
d^.info:=e;
a[i]:=d;
end;
function verificare(x:longint):boolean;
var r:pnod;ver:boolean;
begin
ver:=false;
If (a[i]=nil) then
begin
If c=1 then
Begin
new(a[i]);
a[i]^.dr:=nil;
adaugare(x);
end;
end
else
begin
if a[i]^.dr<>nil then
Begin
r:=a[i];
if r^.info=x then
{daca primul element este x , stergerea sa se face din a[i]}
begin
ver:=true;
if c=2 then
a[i]:=a[i]^.dr;
if c=1 then
adaugare(x);
end;
while r^.dr^.dr<>nil do
{verifica dinainte daca urmatorul nod contine x pentru
a sarii peste el(sterge) in cazul c=2}
begin
if r^.dr^.info=x then
begin
ver:=true;
if c=2 then
r^.dr:=r^.dr^.dr;
if c=1 then
adaugare(x);
end;
if r^.dr<>nil then
r:=r^.dr;
end
end
else
begin
if c=1 then
adaugare(x);
If c=2 then
If x=a[i]^.info then
dispose(a[i]);
end;
end;
verificare:=ver;
end;
begin
assign(f,'hashuri.in');reset(f);
assign(g,'hashuri.out');rewrite(g);
readln(f,n);
for j:=1 to n do
begin
readln(f,c,d);
i:=(d mod 1000000)+1;
t:=verificare(d);
if c=3 then
begin
if t=true then
writeln(g,'1')
else
writeln(g,'0');
end;
end;
close(f);
close(g);
end.