const n = 1000;
type
node = ^qqq;
qqq = record
left, right : node;
key, prior : int64;
end;
decTree = object
private head : node;
private y : int64;
private constructor aaa(var head : node);
private procedure split(act : node; x : int64; var left, right : node);
private procedure merge(var act : node; left, right : node);
private procedure init(var act : node; x, prior : int64);
private function myExists(act : node; x : int64) : node;
private procedure myDelete(var act : node; x : int64);
private procedure myInsert(var act : node; it : node);
public procedure insert(x : int64);
public procedure delete(x : int64);
public function exists(x : int64) : boolean;
end;
constructor decTree.aaa(var head : node);
begin
head := nil;
end;
procedure decTree.split(act : node; x : int64; var left, right : node);
begin
if act = nil then
begin
left := nil;
right := nil;
end
else if (x < act.key) then
begin
split(act.left, x, left, act.left);
right := act;
end
else
begin
split(act.right, x, act.right, right);
left := act;
end;
end;
procedure decTree.merge(var act : node; left, right : node);
begin
if (left = nil) or (right = nil) then
if left = nil then
act := right else
act := left;
if (left <> nil) and (right <> nil) then
if (left.prior > right.prior) then
begin
merge(left.right, left.right, right);
act := left;
end
else
begin
merge(right.left, left, right.left);
act := right;
end;
end;
procedure decTree.init(var act : node; x, prior : int64);
begin
act.key := x;
act.prior := prior;
act.left := nil;
act.right := nil;
end;
function decTree.myExists(act : node; x : int64) : node;
begin
if act <> nil then
begin
if act.key < x then
if act.right <> nil then
myExists := myExists(act.right, x) else
myExists := nil;
if act.key > x then
if act.left <> nil then
myExists := myExists(act.left, x) else
myExists := nil;
if act.key = x then
myExists := act;
end else
myExists := nil;
end;
procedure decTree.myDelete(var act : node; x : int64);
begin
if act.key = x then
merge(act, act.left, act.right) else
if x < act.key then
myDelete(act.left, x) else
myDelete(act.right, x);
end;
procedure decTree.delete(x : int64);
var act : node;
begin
new(act);
if head <> nil then
begin
act := myExists(head, x);
if act <> nil then
myDelete(head, x);
end;
end;
function decTree.exists(x : int64) : boolean;
var act : node;
begin
exists := false;
new(act);
act := myExists(head, x);
if act <> nil then
exists := true;
end;
procedure decTree.myInsert(var act : node; it : node);
begin
if act = nil then
act := it else
if (it.prior > act.prior) then
begin
split(act, it.key, it.left, it.right);
act := it;
end else
if it.key < act.key then
myInsert(act.left, it) else
if it.key > act.key then
myInsert(act.right, it);
end;
procedure decTree.insert(x : int64);
var act : node;
begin
new(act);
y := 1;//random(1000000) + 0;
init(act, x, y);
myInsert(head, act);
end;
var
a : array[0..n] of decTree;
i, j : int64;
f, t : text;
c : char;
function h(s : int64) : int64;
begin
h := (s mod n);
end;
begin
assign(f, 'set.in');
reset(f);
assign(t, 'set.out');
rewrite(t);
while not eof(f) do
begin
read(f, c);
if c = 'i' then
begin
read(f, c, c, c, c, c, c);
read(f, j);
a[h(j)].insert(j);
end else
if c = 'e' then
begin
read(f, c, c, c, c, c, c);
read(f, j);
if a[h(j)].exists(j) then
writeln(t, 'true') else
writeln(t, 'false');
end else
if c = 'd' then
begin
read(f, c, c, c, c, c, c);
read(f, j);
a[h(j)].delete(j);
end;
readln(f);
end;
close(f);
close(t);
end.