program skaiciu_sandaugos;
  { 78 u‘davinys }
  const max = 7; { maksimalus rinkinio dydis }
  type skaiciai = array [1..max] of longint;
       suma = array [1..1000] of longint; { tiek gali b–ti skirting— sum— }
  procedure sandaugos (n : longint; var sk : skaiciai);
    var sum : suma;
        tarp1, tarp2, tarp, { tarpiniai daugikliai }
        s, { pradini— skai‡i— sandauga }
        san, { ie˛komas papildomas daugiklis }
        kiek, { kiek yra galim— sum— }
        i : longint;

    function dbd (x, y : longint) : longint;
      { randa Did‘iausi… bendr… dalikl¨ }
    begin
      if x = 0
         then dbd := y
         else dbd := dbd (y mod x, x)
    end;

    procedure sumos (prad, { toliau bus sumuojama pradedant ˛iuo d‚meniu }
                     s, { suma tur‚s s d‚men— }
                     turim : longint; { jau turima suma }
                     var kiek : longint); { kiek gausis skirtig— sum— }
      { rekursin‚ proced–ra, skai‡iuojanti visas galimas sumas, }
      { sudarytas i˛ s skai‡i— }
      { proced–roje vartojamas globalus sum— masyvas sk }
      var i : longint;
    begin
      for i := prad to n do
        begin
          if s = 1 { jei reikia prid‚ti tik vien… d‚men¨ }
             then begin
                    kiek := kiek + 1;  { j¨ pridedame }
                    sum[kiek] := turim + sk[i];
                  end
             else sumos (i + 1, s - 1, turim + sk[i], kiek)
       end;
    end;

  begin
    { pasirenkame pradinius rinkinio skai‡ius }
    for i := 1 to n do
      sk [i] := i;
    kiek := 0;  { dar nesuskai‡iavome nei vienos sumos }
    for i := 2 to n do
      begin
        { rasime visas galimas sumas, sudarytas i˛ i skai‡i— }
        { prad‚sime sumuoti nuo 1 d‚mens }
        sumos (1, i, 0, kiek);
      end;
      { randama pradini— skai‡i— sandauga }
      s := 1;
      for i := 1 to n do
        s := s * i;
      san := 1;
      for i := 1 to kiek do   { ‡ia skai‡iuojame }
        begin                 { san := san * sum[i] }
          tarp1 := dbd (s , sum[i]); { kad ne¨vykt— perpildymas }
          tarp := sum[i] div tarp1; { atrenkame tik tuos daugiklius, }
          tarp2 := dbd (san, tarp);{ kuri— dar n‚ra sandaugoje san * s }
          san := san * (tarp div tarp2);
        end;
      for i := 1 to n do
        sk[i] := sk[i] * san
  end;
{----------------------------------------------------------}
   var f : text;
       i, n : longint;
       sk : skaiciai;
begin
  assign (f, 'sand.dat');
  reset (f);
  readln (f, n);
  close (f);
  sandaugos (n, sk);
  assign (f, 'sand.rez');
  rewrite (f);
  for i := 1 to n do
    write (f, sk[i], ' ');
  close (f);
end.