#include<iostream>
using namespace std;
char num[10];
void dfs(int x, int sumOfNum, int cnt)
{
if(x == 0 && cnt != 1) // x==0 表示找完了,cnt!=1保证不输出n本身
{
printf("%c", num[0]);
for(int i=1;i<cnt;++i)
{
printf("%c%c", '+', num[i]);
}
printf("%c", '\n');
return;
}
// 遍历从start到x的所有数
// start用于保证大数在后
// 防止出现 1+1+1+1+2+1 这种情况
int start = 1;
if(cnt >= 1)
start = num[cnt-1] - '0';
for(int i=start;i<=x;++i)
{
num[cnt] = char(i + '0');
dfs(x-i, sumOfNum+i, cnt+1);
num[cnt] = 0; // 回溯
// 其实上面这条语句可以不写,因为回溯过程体现在了cnt上
}
}
int n;
int main()
{
cin>>n;
dfs(n,0,0);
}