cc1:array [1..26] of char=('z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a');
var i,j,k,m,n,w,t,sum:integer;
s,s1:string;
a,b,c:array [1..100] of integer;
flag:boolean;
begin
readln(k,w,n);
readln(s);
readln(s1);
for i:=1 to w do
begin
a[i]:=cc[s[w-i+1]];
b[i]:=cc[s1[w-i+1]];
c[i]:=c[i]+a[i]+b[i];
if c[i]>k then begin
c[i+1]:=c[i+1]+c[i] div k;
c[i]:=c[i] mod k;
end;
end;
flag:=true;
for i:=1 to w-1 do
if (c[i]<=c[i+1]) then begin
flag:=false;
break;
end;
if flag then begin
for i:=w downto 1 do
write(cc1[c[i]]);
writeln;
end
else begin
while not flag do
begin
flag:=true;
inc(c[1]);
for i:=1 to w do
if c[i]>k then
begin
c[i+1]:=c[i+1]+c[i] div k;
c[i]:=c[i] mod k;
end;
for i:=1 to w-1 do
if (c[i]<=c[i+1]) then begin
flag:=false;
break;
end;
if c[w+1]>0 then halt;
if c[w]>k-w+1 then halt;
end;
for i:=w downto 1 do
write(cc1[c[i]]);
writeln;
end;
for i:=1 to n do
begin
flag:=false;
while not flag do
begin
flag:=true;
inc(c[1]);
for j:=1 to w do
if c[j]>k then
begin
c[j+1]:=c[j+1]+c[j] div k;
c[j]:=c[j] mod k;
end;
for j:=1 to w do
if (c[j]<=c[j+1]) then begin
flag:=false;
break;
end;
if c[w+1]>0 then halt;
if c[w]>k-w+1 then halt;
end;
if flag then begin
for j:=w downto 1 do
write(cc1[c[j]]);
writeln; end;
end;
end.