def get_partitionr(ss):
# print('ss=', ss)
if len(ss) <= 1:
return [[ss]]
out = []
to_max = 2**len(ss)//2
# print('to_max=', to_max)
for i in range(to_max):
# print('i=', i)
parts = [[], []]
for item in ss:
parts[i&1].append(item)
i >>= 1
# print('parts=', parts)
bb = get_partitionr(parts[1])
# print('bb=', bb)
for b in bb:
c = [parts[0]] if b==[[]] else [parts[0]] + b
# print('c=', c)
out.append(c)
return out
part = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
lr = get_partitionr(part)
print(len(lr))
print(type(lr), lr[0:10])