from pmap import from_word GENS = {"X":(2,2),"T":(2,1),"Ts":(1,2),"cup":(0,2),"cap":(2,0)} def words(m, maxlen, maxw=4): out=[] def rec(cur, layers): out.append((m, list(layers))) if len(layers)==maxlen: return for g,(i,o) in GENS.items(): for pos in range(0, cur-i+1): nc = cur-i+o if nc>maxw: continue rec(nc, layers+[(g,pos)]) rec(m, []) return out def seeds_from(maxk,maxlen,maxw=4): seeds=[] for m in range(0,maxw+1): for mm, layers in words(m, maxlen, maxw): M,n = from_word(mm, layers) if 1 <= M.k <= maxk: seeds.append(M) return seeds