maxn=300001;
type
ree=record
data:longint;
att:array[1..1000] of longint;
end;
var
i,j,n,l,ans:longint;
f:array[1..1000] of ree;
aa,bb:array[1..1000] of longint;
procedure find(a:boolean);
var
i,j,max,tt:longint;
begin
for i:=2 to n do
for j:=1 to i-1 do
if (aa[i]<>maxn)and(aa[j]<>maxn)then
if (aa[j]>=aa[i])and(f[j].data+1>f[i].data) then
begin
f[i].data:=f[j].data+1;
f[i].att:=f[j].att;
f[i].att[f[i].data]:=i;
end;
max:=0;
for i:=1 to n do
if f[i].data>max then
begin
tt:=i;
max:=f[i].data;
end;
if a then write(f[tt].data,' ');
for j:=1 to f[tt].data do
aa[f[tt].att[j]]:=maxn;
end;
function sui:boolean;
var
i:longint;
begin
sui:=true;
for i:=1 to n do
if aa[i]<>maxn then
begin
sui:=false;
exit;
end;
end;
begin
read(n);
for i:=1 to n do
begin
read(aa[i]);
f[i].att[1]:=i;
f[i].data:=1;
end;
find(true);
ans:=1;
while not(sui) do
begin
bb:=aa;
j:=0;
for i:=1 to n do
if bb[i]<>maxn then
begin
inc(j);
aa[j]:=bb[i];
end;
n:=j;
for i:=1 to n do
begin
f[i].data:=1;
f[i].att[1]:=i;
end;
find(false);
inc(ans);
end;
writeln(ans);
end.