program seimas;
  const RZ = 'SEIMAS.REZ';
        DF = 'SEIMAS.DAT';
        MAX = 1500; { maksimalus frakcijÖ skaiÑius seime }
  type lentele = array [1..MAX] of longint;

  procedure i_frakcijas (N: longint; var fr: longint;
                        var fra: lentele);
    var demuo, ind: longint;
  begin
    demuo := 2;
    fr := 0;
    while N >= demuo do { randame frakcijÖ skaiÑiÖ }
      begin
        fr := fr + 1;
        fra[fr] := demuo;
        N := N - demuo;
        demuo := demuo + 1;
      end;
    ind := fr;
    while N > 0 do    { likusius narius iÕskaidome po frakcijas }
      begin
        fra[ind] := fra[ind] + 1;
        N := N - 1;
        if ind = 1
           then ind := fr
           else ind := ind - 1
      end;
  end; { Ô_frakcijas }

  procedure spausdinti (fr: longint; var fra: lentele);
    var f: text;
        i: longint;
  begin
    assign (f, rz);
    rewrite (f);
    writeln (f, fr);
    for i := 1 to fr do
      writeln (f, fra[i]);
    close (f);
  end; { spausdinti }

  var N, fr: longint;
      fra: lentele;
      f: text;
begin
  assign (f, DF);
  reset (f);
  readln (f, N);
  close (f);
  i_frakcijas (N, fr, fra);
  spausdinti (fr, fra);
end.
