program vigenere;
var
  k,c:ansistring;
  lenk,lenc,i,t,x,y,f:longint;
  b:array[1..2000]of boolean;
  ch:char;
begin
  readln(k);
  readln(c);
  lenk:=length(k);
  lenc:=length(c);
  fillchar(b,sizeof(b),false);
  for i:=1 to lenc do
    if c[i] in ['a'..'z'] then
      b[i]:=true;
  f:=0;
  k:=upcase(k);
  c:=upcase(c);
  for i:=1 to lenc do
  begin
    f:=f+1;
    x:=ord(c[i]);
    if f>lenk then f:=1;
    y:=ord(k[f]);
    t:=x-(y-ord('A'));
    if t<ord('A') then t:=t+26;
    ch:=chr(t);
    if b[i] then write(chr(ord(ch)+32))
      else write(ch);
  end;
  writeln;
end.

/**************************************************************
	Problem: 2314
	User: admin
	Language: Pascal
	Result: Wrong Answer
****************************************************************/