program ex;
uses wincrt;
type tab=array [1..10] of integer;
var
t:tab;
i,n,j,p,aux:integer;
procedure shell (var t:tab ; n,p:integer);
var i,j,aux:integer;
begin
if p>1 then
begin
p:= p div 3 ;
for i:=p+1 to n do
begin
aux := t[i];
j:=i;
while (j>p) and (t[j-p] > aux ) do
begin
t[j]:=t[j-p];
j:=j-p;
end;
t[j]:= aux;
end;
shell(t,n,p)
end;
end;
procedure affich (t:tab ; n:integer);
var i:integer;
begin
for i:=1 to n do
begin
writeln('t[',i,'] ',t[i]);
end;
end;
procedure rem (var t:tab ; var n:integer ) ;
var i:integer ;
begin
write ('n'); read(n);
for i:=1 to n do
begin
write('t[',i,']');read(t[i]);
end;
end;
begin
rem(t,n);
p:=1;
while p<n do
begin
p:=p*3+1;
end;
shell(t,n,p);
affich(t,n);
end.