测试结果1: 通过本测试点|有效耗时78ms
测试结果2: 通过本测试点|有效耗时62ms
测试结果3: 通过本测试点|有效耗时63ms
测试结果4: 通过本测试点|有效耗时62ms
测试结果5: 通过本测试点|有效耗时63ms
测试结果6: 通过本测试点|有效耗时62ms
测试结果7: 通过本测试点|有效耗时63ms
测试结果8: 通过本测试点|有效耗时78ms
测试结果9: 通过本测试点|有效耗时62ms
测试结果10:通过本测试点|有效耗时63ms
const nam='alpha.';
var a,b,c:array [1..26] of char;
v:array [1..26] of boolean;
f:array [1..26] of char;
t:array ['A'..'Z'] of boolean;
g:array ['A'..'Z'] of longint;
n:longint;
procedure init;
var i,j:longint;
s:array [1..3] of string;
ch:char;
begin
assign(input,nam+'in'); reset(input);
readln(n);
for i:=1 to 3 do
begin
readln(s[i]);
for j:=1 to (n div 2) do
begin
ch:=s[i][j];
s[i][j]:=s[i][n+1-j];
s[i][n+1-j]:=ch;
end;
end;
close(input);
for i:=1 to n do a[i]:=s[1][i];
for i:=1 to n do b[i]:=s[2][i];
for i:=1 to n do c[i]:=s[3][i];
fillchar(v,sizeof(v),0);
fillchar(t,sizeof(t),0);
end;
procedure print;
var ch:char;
begin
assign(output,nam+'out'); rewrite(output);
for ch:='A' to chr(ord('A')+n-1) do write(g[ch],' ');
close(output);
halt;
end;
function right(k:longint):boolean;
var i,j:longint;
begin
for i:=k to n do
begin
if t[a[i]] and t[b[i]] and t[c[i]] then
if ((g[a[i]]+g[b[i]]) mod n<>g[c[i]]) and ((g[a[i]]+g[b[i]]+1) mod n<>g[c[i]])
then exit(false) else continue;
if t[a[i]] and t[b[i]] then
if (v[(g[a[i]]+g[b[i]]) mod n]=true) and (v[(g[a[i]]+g[b[i]]+1) mod n]=true)
then exit(false) else continue;
if t[a[i]] and t[c[i]] then
if (v[(g[c[i]]+n-g[a[i]]) mod n]=true) and (v[(g[c[i]]+n-g[a[i]]-1) mod n]=true)
then exit(false) else continue;
if t[b[i]] and t[c[i]] then
if (v[(g[c[i]]+n-g[b[i]]) mod n]=true) and (v[(g[c[i]]+n-g[b[i]]-1) mod n]=true)
then exit(false) else continue;
end;
exit(true);
end;
procedure work(k,p:longint);
var i,j:longint;
x1,x2,x3:longint;
begin
if k=n+1 then print;
if t[a[k]]
then begin
x1:=g[a[k]];
if t[b[k]]
then begin
x2:=g[b[k]];
if t[c[k]]
then begin
x3:=g[c[k]];
if x1+x2+p=x3 then work(k+1,0);
if x1+x2+p=x3+n then work(k+1,1);
end
else begin
for x3:=n-1 downto 0 do
if v[x3]=false then
begin
v[x3]:=true;
f[x3]:=c[k];
t[c[k]]:=true;
g[c[k]]:=x3;
if right(k) then
begin
if x1+x2+p=x3 then work(k+1,0);
if x1+x2+p=x3+n then work(k+1,1);
end;
v[x3]:=false;
t[c[k]]:=false;
end;
end;
end
else begin
for x2:=n-1 downto 0 do
if v[x2]=false then
begin
v[x2]:=true;
f[x2]:=b[k];
t[b[k]]:=true;
g[b[k]]:=x2;
if right(k) then
begin
if t[c[k]]
then begin
x3:=g[c[k]];
if x1+x2+p=x3 then work(k+1,0);
if x1+x2+p=x3+n then work(k+1,1);
end
else begin
for x3:=n-1 downto 0 do
if v[x3]=false then
begin
v[x3]:=true;
f[x3]:=c[k];
t[c[k]]:=true;
g[c[k]]:=x3;
if right(k) then
begin
if x1+x2+p=x3 then work(k+1,0);
if x1+x2+p=x3+n then work(k+1,1);
end;
v[x3]:=false;
t[c[k]]:=false;
end;
end;
end;
v[x2]:=false;
t[b[k]]:=false;
end;
end;
end
else begin
for x1:=n-1 downto 0 do
if v[x1]=false then
begin
v[x1]:=true;
f[x1]:=a[k];
t[a[k]]:=true;
g[a[k]]:=x1;
if right(k) then
begin
if t[b[k]]
then begin
x2:=g[b[k]];
if t[c[k]]
then begin
x3:=g[c[k]];
if x1+x2+p=x3 then work(k+1,0);
if x1+x2+p=x3+n then work(k+1,1);
end
else begin
for x3:=n-1 downto 0 do
if v[x3]=false then
begin
v[x3]:=true;
f[x3]:=c[k];
t[c[k]]:=true;
g[c[k]]:=x3;
if right(k) then
begin
if x1+x2+p=x3 then work(k+1,0);
if x1+x2+p=x3+n then work(k+1,1);
end;
v[x3]:=false;
t[c[k]]:=false;
end;
end;
end
else begin
for x2:=n-1 downto 0 do
if v[x2]=false then
begin
v[x2]:=true;
f[x2]:=b[k];
t[b[k]]:=true;
g[b[k]]:=x2;
if right(k) then
begin
if t[c[k]]
then begin
x3:=g[c[k]];
if x1+x2+p=x3 then work(k+1,0);
if x1+x2+p=x3+n then work(k+1,1);
end
else begin
for x3:=n-1 downto 0 do
if v[x3]=false then
begin
v[x3]:=true;
f[x3]:=c[k];
t[c[k]]:=true;
g[c[k]]:=x3;
if right(k) then
begin
if x1+x2+p=x3 then work(k+1,0);
if x1+x2+p=x3+n then work(k+1,1);
end;
v[x3]:=false;
t[c[k]]:=false;
end;
end;
end;
v[x2]:=false;
t[b[k]]:=false;
end;
end;
end;
v[x1]:=false;
t[a[k]]:=false;
end;
end;
end;
Begin
init;
work(1,0);
End.
9kb啊9kb~~~