program abecele;
  { 123 u‘davinys }
  const max = 1000;  { maksimalus sudarom— ‘od‘i— skai‡ius }
        milg = 25; { maksimalus sudaromo ‘od‘io ilgis }
  type v_zodis = array [1..milg] of char;
       zodziai = array [1..max] of v_zodis;

  procedure formuoti (n, { ab‚c‚l‚s simboli— skai‡ius }
                      k : integer; { sudarom— ‘od‘i— ilgis }
                      abc : string; { ab‚c‚l‚s simboliai }
                      var zod: zodziai; { sudaryti ‘od‘iai }
                      var kiek : integer); { sudaryt— ‘od‘i— skai‡ius }
    var z : v_zodis;
    procedure zodis (poz : integer);
      { rekursin‚ proced–ra, formuojanti ‘od‘ius nuo poz pozicijos }
      { n, k, kiek, z - globalieji }
         var i : integer;
    begin
      if poz = k + 1   { jei ‘odis jau sudarytas }
         then begin
                kiek := kiek + 1;
                zod[kiek] := z;
              end
        else for i := 1 to n do  { formuojame ‘od }
               begin
                 z[poz] := abc[i];
                 zodis (poz + 1)
               end
    end;

  begin
    kiek := 0; { nesudarytas nei vienas ‘odis }
    zodis (1)
  end;

  var f : text;
      n, k, i, kiek : integer;
      abc : string;
      zod : zodziai;
      c : char;
begin
  assign (f, 'abc.dat');
  reset (f);
  readln (f, n);
  abc := '';
  for i := 1 to n do
    begin
      readln (f, c); { skaitoma ab‚c‚l‚ }
      abc := abc + c;
    end;
  readln (f, k);
  close(f);

  formuoti (n, k, abc, zod, kiek);

  assign (f, 'abc.rez' );
  rewrite(f);
  for i := 1 to kiek do
    writeln (f, zod[i]);
  close(f)
end.

