from numpy import *
enc = [-108, -200, 294, -216, -1008, 660, -866, 1770, 220, 6, -244, -522, -1406, -816, 386, 990, 334, 690, -1832, 372, -1370, -1580, 450, -1668, 858, 326, -196, -1516, 462, 2012, -696, 152, 2142, -592, -68, 878, -178, -1994, 1472, 1710, 1684, 34]
s = [[1, 1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 ], [1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 ], [1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 ], [1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 ], [1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 ], [1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 ], [1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 ], [1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 ], [1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 ], [1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 ], [1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 ], [1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 ], [1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 ], [1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 ], [1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 ], [1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 ], [1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 ], [1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 ], [1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 ], [1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 ], [1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 ], [1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 ], [1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 ], [1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 ], [1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 ], [1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 ], [1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 ], [1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 ], [1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 ], [1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 ], [1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 ], [1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 ], [1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 ], [1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 ], [1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 ], [1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 ], [1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 ], [1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 ], [1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 ], [1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 ], [1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 ], [1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 ]]
a = asarray(s) b = asarray(enc) x = linalg.solve(a, b) print(x) y = [] for i in range(42): y.append(int(round(x[i]))) print(y) print(allclose(dot(a, x), b))
flag = ''
for i in range(len(y)): y[i] ^= i c = (y[i] << 5 | y[i] >> 3) & 0xff print c, flag += chr(c)
print flag
|