program bing;
type
tree=record
l,r:integer;
n,a:longint;
end;
var
f1,f2:text;
n,nt:longint;
d:array[0..10000] of tree;
procedure nb(x:longint);
var
i:integer;
begin
i:=1;
repeat
if (x>d[i].a)and(d[i].r<>0) then i:=d[i].r;
if (x<d[i].a)and(d[i].l<>0) then i:=d[i].l;
until (x=d[i].a)or((x>d[i].a)and(d[i].r=0))or((x<d[i].a)and(d[i].l=0));
if x=d[i].a then inc(d[i].n)
else
if (x>d[i].a)and(d[i].r=0) then
begin
inc(nt);
d[nt].a:=x;
inc(d[nt].n);
d[i].r:=nt;
end
else
if (x<d[i].a)and(d[i].l=0) then
begin
inc(nt);
d[nt].a:=x;
inc(d[nt].n);
d[i].l:=nt;
end;
end;
procedure init;
var
i,m:longint;
begin
assign(f1,'pcount.in');reset(f1);
assign(f2,'pcount.out');rewrite(f2);
readln(f1,n);
readln(f1,m);
fillchar(d,sizeof(d),0);
d[1].a:=m;
d[1].n:=1;
nt:=1;
for i:=2 to n do
begin
readln(f1,m);
nb(m);
end;
end;
procedure print(x:integer);
begin
if d[x].l<>0 then print(d[x].l);
writeln(f2,d[x].a,' ',d[x].n);
if d[x].r<>0 then print(d[x].r);
end;
begin
init;
print(1);
close(f1);close(f2);
end.