#!/usr/bin/env python3 from functools import lru_cache 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)) sp={11,1,2,4,5,6,7,8,9} @lru_cache(None) def O(c,l): if not l: return c if c in sp else 10 return w(O(c,l[1:]),O(l[0],l[1:])) def full(cs,p): c1,c2,c3=cs return w(O(c1,(c3,)+p),O(c2,(c3,)+p)) from itertools import permutations S={11:(1,2,3,4,5,6,7,8,9),1:(1,2,3,4,6,7,8,9,5),6:(1,2,3,4,6,7,9,8,5),9:(1,2,3,4,6,8,9,5,7),8:(1,2,3,6,7,8,9,4,5)} cs=[(10,10,11),(10,11,10),(11,10,10),(10,10,11),(10,11,10),(11,10,10)] for o,p in S.items(): print(o,[full(c,p) for c in cs])