def mask(c,a,b): m=0 for z in c['pair']: if z==a: m+=1 elif z==b: m+=2 return m def integ(basis,x): return all(v.denominator==1 and (v==0 or v==1) for v in x) def obj(basis,x): return sum(c['cost']*x[k] for k,c in enumerate(basis)) base=cols[:7] same=[c for c in roots if mask(c,a,b) in (0,3)] pick=min([c for c in same if mask(c,a,b)==3],key=lambda c:c['cid']) sc=[base[i] for i in range(7) if i!=a-1]+same sb=[pick if i==a-1 else base[i] for i in range(7)] u,sc,sb,sx,spi=runnode(sc,sb,a,b,1,u) print('SAME',obj(sb,sx),integ(sb,sx),[(c['cid'],c['cov'],sx[k]) for k,c in enumerate(sb)])