const
 WMAX = 19;
 K = WMAX*25+26;
 NMAX = 300;

var
 i,j,l: Integer;
 c: char;
 s,s1: string;
 w: array[1..K] of String[20];

procedure quicksort;

procedure sort(l,r: integer);
var
  i,j: integer;
  x,y: String[20];
begin
  i:=l; j:=r; x:=w[(l+r) DIV 2];
  repeat
    while w[i]<x do i:=i+1;
    while x<w[j] do j:=j-1;
    if i<=j then
    begin
      y:=w[i]; w[i]:=w[j]; w[j]:=y;
      i:=i+1; j:=j-1;
    end;
  until i>j;
  if l<j then sort(l,j);
  if i<r then sort(i,r);
end;

begin {quicksort};
  sort(1,K);
end;

begin
 j:=0;
 writeln (K);
 s:='';
 for i:=1 to WMAX do s:=s+'z';
 l:=1;

   for i:=1 to WMAX do
   begin
     if l>K then break;
     for c:='a' to 'y' do 
     begin
       s1:=s;
       s1[i]:=c;
       inc(j);
       w[j]:=s1;
       inc(l);
       if l>K then break;
     end;
   end;
   
   for c:='a' to 'z' do
   begin
     if l>K then break; 
     s1:=s;
     s1:=s1+c;
     inc(j);
     w[j]:=s1;
     inc(l);
   end;

   quicksort;

   for i:=1 to j do writeln(w[i]);

 writeln(NMAX);
 for i:=1 to NMAX do writeln(s,' ',s,' ',s,' ',s);
end.
