program Combsort(Output);

procedure combsort(var a : array [low..high : Integer ] of Integer);

   procedure swap (var a, b :  Integer);
   var
      temp : Integer;
   begin
      temp := a;
      a := b;
      b := temp;
   end; 

const
   length =  high - low;
var 
   gap     : 0 .. length = length;
   i, j    : low..high;
   swapped : Boolean;
begin 
   repeat
      gap := (gap * 10) div 13;
      if (gap = 9) or (gap = 10) then
         gap := 11;
      if (gap < 1) then
         gap := 1;
      swapped := False;
      for i := low to high - gap do
      begin
         j := i + gap;
         if a[i] > a[j] then
         begin
            swap(a[i], a[j]);
            swapped := True
         end
      end
   until (gap = 1) and not swapped
end;  

var
   i : Integer;
   a : array[1..10] of Integer = (1, 6, 5, 3, 8, 9, 7, 2, 4, 0);

begin
   combsort(a);
   for i := Low(a) to High(a) do
      Write(' ', a[i]);
   Writeln
end.
