from collections import Counter
from pprint import pprint

basis = [1,2,3,4,5,6]

def get_all_subsets(l):
    if l == []:
        return [[]]
    subs = get_all_subsets(l[1:])
    return subs + [[l[0]] + el for el in subs]

all_subsets = get_all_subsets(basis)
all_subsets = sorted([sub for sub in all_subsets if len(sub) >= 2])
# all_subsets = sorted([sub for sub in all_subsets if len(sub) >= 2])
# all_subsets = sorted([sub for sub in all_subsets if sum(sub) < 9])

def product(sub):
    if len(sub) == 0:
        return 1
    return sub[0] * product(sub[1:])

def sort_keys(counter: Counter) -> Counter:
    out = Counter()
    for key in sorted(counter.keys()):
        out[key] = counter[key]
    return out

def print_sorted_by_key(counter: Counter) -> Counter:
    print('{')
    for key in sorted(counter.keys()):
        print(f'    {key}: {counter[key]},')
    print('}')


sum_counter = Counter(sum(sub) for sub in all_subsets)
product_counter = Counter(product(sub) for sub in all_subsets)
product_counter_unique_sum = Counter(product(sub) for sub in all_subsets if sum_counter[sum(sub)] > 1)

#debug
print_sorted_by_key(sum_counter)
print_sorted_by_key(product_counter)

print(sum([3,4,5,6]))
print(product([3,4,5,6]))
print('a', [(sub, sum(sub)) for sub in all_subsets if sum(sub)==18])
print('b', [(sub, product(sub)) for sub in all_subsets if product(sub)==360])
print(sum([3,4,5,6]))
print(sum([1,3,4,5,6]))


print('xxx')

# solve it one way
for sub in all_subsets:
    if sum_counter[sum(sub)] > 1 and product_counter_unique_sum[product(sub)] == 1:
        print(sub, sum(sub), product(sub))

print('xxx')

# solve it one way
for sub in all_subsets:
    if sum_counter[sum(sub)] > 1 and product_counter[product(sub)] == 1:
        print(sub, sum(sub), product(sub))

print('yyy')

# solve it another way
for answer_sum in range(100):
    if sum_counter[answer_sum] == 0:
        continue
    has_some_determined = False
    has_some_undetermined = False
    for sub in all_subsets:
        if not sum(sub) == answer_sum:
            continue
        if product_counter[product(sub)] > 1:
            has_some_undetermined += True
        if product_counter[product(sub)] == 1:
            has_some_determined += True

    if not (has_some_determined and has_some_undetermined):
        continue

    print(answer_sum, has_some_determined, has_some_undetermined)
    # print(sub, sum(sub), product(sub))
    # print()
