def condense_sets(sets): result = [] for candidate in sets: for current in result: if candidate & current: # found overlap current |= candidate # combine (merge sets) # new items from candidate may create an overlap # between current set and the remaining result sets result = condense_sets(result) # merge such sets break else: # no common elements found (or result is empty) result.append(candidate) return result sets = eval(input()) print(condense_sets(sets))
[ {1,2}, {2,3}, {3,4}, {10, 11, 12}, {10, 13}, {20, 21} ]