#include<bits/stdc++.h>
using namespace std ;
#define endl "\n"
using ll = long long ;
int n , k , a[100] , cnt;
bool final = false;
vector<vector<string>> res ;
void khoiTao(){
cnt = 1 ;
a[1] = n ;
}
void Sinh(){
// bat dau tu so hang cuoi cung va tim so hang dau tien khac 1
int i = cnt ;
while(i >= 1 && a[i] == 1) --i ;
if( i == 0){
final = true ;
}
else{
int tmp = cnt - i + 1 ;
a[i]-- ; // giam a[i] 1 don vi
cnt = i ; // gan lai cnt
int q = tmp / a[i] ; // xem tmp gap may lan a[i]
int r = tmp % a[i] ; // xem tmp chia du cho a[i] bang 0 hay kh
for(int j = 1 ; j <= q ; j++){
a[i + j] = a[i];
++cnt ;
}
if(r != 0){
++cnt ;
a[cnt] = r ; // gan gia tri cuoi cho du
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n ;
khoiTao();
while(!final){
vector<string> v ;
for(int i = 1 ; i <= cnt ; i++){
v.push_back(to_string(a[i]));
if(i != cnt) v.push_back("+");
}
res.push_back(v);
cout << endl;
Sinh();
}
cout << res.size() << endl ;
for(int i = 0 ; i < res.size() ; i++){
for(auto x : res[i]){
cout << x ;
}
cout << endl ;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZCA7CiNkZWZpbmUgZW5kbCAiXG4iCnVzaW5nIGxsID0gbG9uZyBsb25nIDsKCmludCBuICwgayAsIGFbMTAwXSAsIGNudDsKYm9vbCBmaW5hbCA9IGZhbHNlOyAKdmVjdG9yPHZlY3RvcjxzdHJpbmc+PiByZXMgOwoKdm9pZCBraG9pVGFvKCl7CiAgICBjbnQgPSAxIDsKICAgIGFbMV0gPSBuIDsKfQoKCnZvaWQgU2luaCgpewogICAgLy8gYmF0IGRhdSB0dSBzbyBoYW5nIGN1b2kgY3VuZyB2YSB0aW0gc28gaGFuZyBkYXUgdGllbiBraGFjIDEgCiAgICBpbnQgaSA9IGNudCA7CiAgICB3aGlsZShpID49IDEgJiYgYVtpXSA9PSAxKSAtLWkgOwogICAgCiAgICBpZiggaSA9PSAwKXsKICAgICAgICBmaW5hbCA9IHRydWUgOwogICAgfQogICAgCiAgICBlbHNlewogICAgICAgIGludCB0bXAgPSBjbnQgLSBpICsgMSA7CiAgICAgICAgYVtpXS0tIDsgLy8gZ2lhbSBhW2ldIDEgZG9uIHZpIAogICAgICAgIGNudCA9IGkgOyAvLyBnYW4gbGFpIGNudCAKICAgICAgICBpbnQgcSA9IHRtcCAvIGFbaV0gOyAvLyB4ZW0gdG1wIGdhcCBtYXkgbGFuIGFbaV0KICAgICAgICBpbnQgciA9IHRtcCAlIGFbaV0gOyAvLyB4ZW0gdG1wIGNoaWEgZHUgY2hvIGFbaV0gYmFuZyAwIGhheSBraAogICAgICAgIGZvcihpbnQgaiA9IDEgOyBqIDw9IHEgOyBqKyspewogICAgICAgICAgICBhW2kgKyBqXSA9IGFbaV07CiAgICAgICAgICAgICsrY250IDsKICAgICAgICB9CiAgICAgICAgaWYociAhPSAwKXsKICAgICAgICAgICAgKytjbnQgOwogICAgICAgICAgICBhW2NudF0gPSByIDsgLy8gZ2FuIGdpYSB0cmkgY3VvaSBjaG8gZHUgCiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGNvdXQudGllKG51bGxwdHIpOwogICAgCiAgICBjaW4gPj4gbiA7CiAgICBraG9pVGFvKCk7CiAgICAKICAgIHdoaWxlKCFmaW5hbCl7CiAgICAgICAgdmVjdG9yPHN0cmluZz4gdiA7CiAgICAgICAgZm9yKGludCBpID0gMSA7IGkgPD0gY250IDsgaSsrKXsKICAgICAgICAgICAgdi5wdXNoX2JhY2sodG9fc3RyaW5nKGFbaV0pKTsKICAgICAgICAgICAgaWYoaSAhPSBjbnQpIHYucHVzaF9iYWNrKCIrIik7CiAgICAgICAgfQogICAgICAgIHJlcy5wdXNoX2JhY2sodik7CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgICAgIFNpbmgoKTsKICAgIH0KCiAgICBjb3V0IDw8IHJlcy5zaXplKCkgPDwgZW5kbCA7CgogICAgZm9yKGludCBpID0gMCA7IGkgPCByZXMuc2l6ZSgpIDsgaSsrKXsKICAgICAgICBmb3IoYXV0byB4IDogcmVzW2ldKXsKICAgICAgICAgICAgY291dCA8PCB4ICA7CiAgICAgICAgfQogICAgICAgIGNvdXQgIDw8IGVuZGwgOwogICAgfQp9CgoK