program laiptai_is_kubeliu;
  { 149 u‘davinys }
  
  const MAX_N = 25; { maksimalus pakop— skai‡ius }
  type pakopos = array [1..MAX_N] of integer;

  { ‘emiau suražyti globalieji kintamieji }
  var p: pakopos;
      nr: integer; { ‘emiausios pakopos numeris }

    procedure deti (buves, { buvusio laiptelio aukžtis }
                    liko: integer; { likusi— kubeli— skai‡ius }
                    var kiek: integer { skirting— laipt— skai‡ius });
    { rekursin‚ proced–ra, sudedanti vien… laiptel }
      var i: integer;
    begin
      if liko = 0
      then begin
             kiek := kiek + 1; { sud‚jome dar vien… variant… }
             for i := 1 to nr do
               write (p[i], ' ');
             writeln;
           end
     else if not ((buves = 1) and (liko > 0))
          then  begin  { jei galima sud‚ti dar vien… laiptel }
                  for i := buves-1 downto 1 do
                    if liko-i >= 0
                       then begin
                              nr := nr + 1;
                              p[nr] := i;
                              deti(i, liko-i, kiek);
                              nr := nr - 1
                            end;
                end;
    end; { d‚ti }

  var kiek, n, i: integer;
begin
  write ('­veskite kubeli— skai‡i—: ');
  readln (n);
  kiek := 0;
  nr := 1;
  for i := n downto 1 do
    begin
      p[nr] := i;
      deti (i, n-i, kiek);
    end;
  writeln ('Laipt— skai‡ius: ', kiek);
end.