import
copy
ts
=
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ+-*/%='
mat
=
[
2
,
5
,
28
,
33
,
35
,
26
,
12
,
29
,
1
,
39
,
13
,
40
,
38
,
21
]
dis
=
{}
def
get_dis(a,b,c,d):
dx
=
c
-
d
dy
=
a
-
b
if
dx <
0
:
dy
=
-
dy
dx
=
-
dx
dy
+
=
0x29
return
dy
*
42
+
dx
def
get_dis_all(p):
dis
=
[]
for
i
in
range
(
len
(p)
-
1
):
for
j
in
range
(i
+
1
,
len
(p)):
dis.append(get_dis(i,j,p[i],p[j]))
return
dis
def
search(cur):
global
count,mat,dis
if
cur
=
=
42
:
out
=
''
for
i
in
range
(
42
):
out
+
=
'{}{}'
.
format
(ts[i],ts[mat[i]])
print
out
prettyprint(mat)
exit()
for
i
in
range
(cur,
42
):
flag
=
True
for
j
in
range
(cur):
if
get_dis(j,cur,mat[j],mat[i])
in
dis:
flag
=
False
break
if
flag:
for
k
in
range
(cur):
dis[get_dis(k,cur,mat[k],mat[i])]
=
1
mat[i],mat[cur]
=
mat[cur],mat[i]
search(cur
+
1
)
mat[i],mat[cur]
=
mat[cur],mat[i]
for
k
in
range
(cur):
dis.pop(get_dis(k,cur,mat[k],mat[i]))
def
prettyprint(solution):
def
line(pos, length
=
len
(solution)):
return
' . '
*
(pos)
+
' x '
+
' . '
*
(length
-
pos
-
1
)
for
pos
in
solution:
print
(line(pos))
def
main():
global
dis
for
i
in
get_dis_all(mat[:
14
]):
dis[i]
=
1
for
i
in
range
(
42
):
if
i
not
in
mat:
mat.append(i)
search(
14
)
print
'end.'
if
__name__
=
=
'__main__'
:
main()