{ genereerib muutujasse s esimese n-tähelise permutatsiooni }
procedure init(var s : string; n : integer);
var i : integer; c : char;
begin
   s := ''; c := 'a';
   for i := 1 to n do begin
      s := s + c;
      c := succ(c);
   end;
end;

{ genereerib muutujasse s järgmise permutatsiooni }
{ tagastab true, kui see õnnestus, false, kui mitte }
function next(var s : string) : boolean;
var i, k, m, n : integer; c : char;
begin
   n := length(s);
   k := 0;
   for i := 1 to n - 1 do begin
      if s[i] < s[i + 1] then begin
         k := i;
      end;
   end;
   if k = 0 then begin
      next := false;
   end else begin
      m := 0;
      for i := k + 1 to n do begin
         if s[i] > s[k] then begin
            m := i;
         end;
      end;
      c := s[k]; s[k] := s[m]; s[m] := c;
      k := k + 1; m := n;
      while k < m do begin
         c := s[k]; s[k] := s[m]; s[m] := c;
         k := k + 1; m := m - 1;
      end;
      next := true;
   end;
end;

var n : integer; s : string;
begin
   readln(n);
   init(s, n);
   repeat
      writeln(s);
   until not next(s);
end.
