#!/usr/bin/env python3 from collections import defaultdict B={1:{2,5,8,9},2:{5,7,8},4:{1,2,5,7},5:{7,11},6:{1,2,4,5,8},7:{1,6,8},8:{4,5,9},9:{2,4,5,6,7},11:{1,2,4,6,7,8,9}} def w(a,u): return a if a==u else (10 if u==10 else u) if a==10 else (a if u==10 else (a if u in B.get(a,()) else u)) items=tuple(range(1,10)) allc=items+(10,11) init={c:(c if c in {11,1,2,4,5,6,7,8,9} else 10) for c in allc} dp={0:{tuple(init[c] for c in allc)}} mask={} for m in range(512): if m not in dp: continue S=[i for i in range(9) if m>> i&1] out=[c for c in allc if c not in [items[i] for i in S]] for j,p in enumerate(items): if m>>j&1: continue nm=m|(1<