d = defaultdict(list)
# Magic
for i in range(2, 10000):
for y in i in d and d.pop(i) or [i]:
d[i+y] += (y,)
# Not sure how to print this in a succinct way
print(sorted(list(set().union(*d.values()))))
from collections import defaultdict
d = defaultdict(list)
for i in range(2, 10000):
for y in d.pop(i, [i]):
d[i + y].append(y)
for y in sorted(y for x in d.values() for y in x):
print(y)