var
  a:Array[1..3,1..26]of char;
  b:array['A'..'Z']of longint;
  c:array[0..25]of boolean;
  i,j,n:longint;
function check(x,m:longint):boolean;
var
  yy:boolean;
  i,j:longint;
begin
  if ((b[a[1,x]]+b[a[2,x]]+m)mod n<>b[a[3,x]]) then exit(false);
  for i:=1 to x-1 do
  if (b[a[1,i]]<>-1)and(b[a[2,i]]<>-1)and(b[a[3,i]]<>-1)then
    begin
      yy:=true;
      for j:=0 to 1 do
        if (b[a[1,i]]+b[a[2,i]]+j)mod n=b[a[3,i]] then yy:=false;
      if yy then exit(false);
    end;
  check:=true;
end;
procedure dfs(x,m:longint);
var i,j,d,p,mm:longint;
    aa,bb,cc:boolean;
begin
  if x=0 then
    begin
      if m=0 then
        begin
          for i:=1 to n-1 do write(b[chr(i+64)],' ');
          writeln(b[chr(n+64)]);
          halt;
        end;
      exit;
    end;
  aa:=false;
  bb:=false;
  cc:=false;
  if b[a[1,x]]<>-1 then aa:=true;
  if b[a[2,x]]<>-1 then bb:=true;
  if b[a[3,x]]<>-1 then cc:=true;
  if (aa and bb and cc) then
    begin
      if check(x,m) then dfs(x-1,(m+b[a[1,x]]+b[a[2,x]])div n);
    end
    else if aa and bb then
      begin
        d:=(b[a[1,x]]+b[a[2,x]]+m)mod n;
        if c[d] then
          begin
            b[a[3,x]]:=d;
            c[d]:=false;
            mm:=(b[a[1,x]]+b[a[2,x]]+m)div n;
            if check(x,m) then dfs(x-1,mm);
              c[d]:=true;
              b[a[3,x]]:=-1;
          end;
      end
    else if aa and cc then
  begin
    d:=(b[a[3,x]]-m-b[a[1,x]]+n)mod n;
    if c[d] then
    begin
      b[a[2,x]]:=d;
      c[d]:=false;
      mm:=(d+b[a[1,x]]+m)div n;
      if check(x,m) then dfs(x-1,mm);
      m:=mm;
      c[d]:=true;
      b[a[2,x]]:=-1;
    end;
  end
  else if bb and cc then
    begin
      d:=(b[a[3,x]]-m-b[a[2,x]]+n)mod n;
        if c[d] then
          begin
            b[a[1,x]]:=d;
            c[d]:=false;
            mm:=(d+b[a[2,x]]+m)div n;
            if check(x,m) then dfs(x-1,mm);
            m:=mm;
            c[d]:=true;
            b[a[1,x]]:=-1;
          end;
    end
  else if (not aa)and(not bb)and(not cc) then
    begin
      if a[1,x]<>a[2,x] then
        begin
          for i:=n-1 downto 0 do
            for j:=n-1 downto 0 do
              if (c[i] and c[j])and(i<>j) then
                begin
                  c[i]:=false;
                  c[j]:=false;
                  b[a[1,x]]:=j;
                  b[a[2,x]]:=i;
                  dfs(x,m);
                  c[i]:=true;
                  c[j]:=true;
                  b[a[1,x]]:=-1;
                  b[a[2,x]]:=-1;
                end;
    end
else
for i:=n-1 downto 0 do
if c[i] then
begin
  b[a[1,x]]:=i;
  c[i]:=false;
  dfs(x,m);
  b[a[p,x]]:=-1;
  c[i]:=true;
end;
end
else begin
  for i:=n-1 downto 0 do
  if c[i] then
    begin
      if not aa then p:=1
      else if not bb then p:=2
      else if not cc then p:=3;
      b[a[p,x]]:=i;
      c[i]:=false;
      dfs(x,m);
      b[a[p,x]]:=-1;
      c[i]:=true;
    end;
      end;
end;
begin
  readln(n);
  for i:=1 to 3 do
    begin
      for j:=1 to n do
        read(a[i,j]);
      readln;
    end;
  fillchar(b,sizeof(b),255);
  fillchar(c,sizeof(c),true);
  dfs(n,0);
end.
/**************************************************************
	Problem: 2251
	User: admin
	Language: Pascal
	Result: Wrong Answer
****************************************************************/