n = int(input())
A=[n]
print (n)
def k(A):
s=0
d=0
p=0
r=0
bool_res = bool(A)
if bool_res:
if len(A)==1:
r=A[-1]//2
p=A[-1]-r
A.pop()
A.append(r)
A.append(p)
print(A)
input()
else:
while A[-1]!=1:
for i in range(len(A)):
if A[i]>1 and i!=len(A):
A[i-1]-=1
A[i]+=1
else:
if i!=len(A) :
i=i+1
else:
if i==len(A):
d=A[i]
s=A[i]//2
A.pop()
A.append(s)
A.append(d-s)
return bool_res
while k(A):
for i in range(len(A)):
print(A[i],end='')
if len(A)-i>1:
print(end="+")
print()
def partition(cap, lim):
if cap <= lim:
yield (cap,)
for head in range(min(cap - 1, lim), 0, -1):
for tail in partition(cap - head, head):
yield (head,) + tail
for p in partition(5, 5):
print('+'.join(map(str, p)))
def elements(x):
result = [[x]]
for element in result:
for j, number in enumerate(element):
if number > 1:
for i in range(1, int(number / 2) + 1):
copy = element[:]
del copy[j]
new_elem = sorted(copy + [i] + [number - i])
if new_elem not in result:
result.append(new_elem)
s = ''
for char in new_elem:
s += str(char)
print('+'.join(s))