var a:string;
b:char;
i,j,k,la,lb,m,kk:integer;
d:boolean;
p:array[1..26,1..26]of char;
procedure wr;
begin
for i:=1 to 26 do
for j:=1 to 27-i do
p[i,j]:=chr(i+j+95);
k:=97;
for j:=2 to 26 do
begin
p[i,j]:=chr(k); inc(k);
end;
for i:=25 downto 2 do
for j:=28-i to 26 do
p[i,j]:=p[i+1,j-1];
end;
begin
assign(input,'vigenere.in');
assign(output,'vigenere.ans');
reset(input);
rewrite(output);
wr;
read(a);
readln;
la:=length(a); j:=0;
while not eoln do
begin
read(b);
inc(j); d:=false;
if j>la then j:=1;
if ord(b)<97 then begin d:=true; b:=chr(ord(b)+32); end;
m:=ord(a[j])-96;
for k:=1 to 26 do
if p[m,k]=b then kk:=k;
if d then write(upcase(chr(kk+96))) else write(chr(kk+96));
end;
close(input);
close(output);
end.