#include <iostream>
#include <iomanip>
#include <limits>
using namespace std;
int pr[110] = { 0 };
int getSol(int N)
{
static int v[110] = { 0 };
if (N == 1) { pr[N] = 0; return 1; }
if (N < 1) return numeric_limits<int>::max();
if (v[N]) return v[N];
int step = numeric_limits<int>::max();
if (N%3 == 0)
step = getSol(N/3);
int four = getSol(N-4);
if (four < step)
{
pr[N] = N-4;
return v[N] = four+1;
}
pr[N] = N/3;
return v[N] = step+1;
}
void print(int * p, int n)
{
if (n == 0) return;
print(p,p[n]);
cout << n << " ";
}
int main(int argc, const char * argv[])
{
cout << getSol(109) << endl;
print(pr,109);
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxpb21hbmlwPgogICAgI2luY2x1ZGUgPGxpbWl0cz4KICAgIAogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAgIAogICAgaW50IHByWzExMF0gPSB7IDAgfTsKICAgIAogICAgaW50IGdldFNvbChpbnQgTikKICAgIHsKICAgICAgICBzdGF0aWMgaW50IHZbMTEwXSA9IHsgMCB9OwogICAgCiAgICAgICAgaWYgKE4gPT0gMSkgeyBwcltOXSA9IDA7IHJldHVybiAxOyB9CiAgICAKICAgICAgICBpZiAoTiA8IDEpIHJldHVybiBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICAgICBpZiAodltOXSkgcmV0dXJuIHZbTl07CiAgICAgICAgaW50IHN0ZXAgPSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICAgICBpZiAoTiUzID09IDApCiAgICAgICAgICAgIHN0ZXAgPSBnZXRTb2woTi8zKTsKICAgICAgICBpbnQgZm91ciA9IGdldFNvbChOLTQpOwogICAgICAgIGlmIChmb3VyIDwgc3RlcCkKICAgICAgICB7CiAgICAgICAgICAgIHByW05dID0gTi00OwogICAgICAgICAgICByZXR1cm4gdltOXSA9IGZvdXIrMTsKICAgICAgICB9CiAgICAgICAgcHJbTl0gPSBOLzM7CiAgICAgICAgcmV0dXJuIHZbTl0gPSBzdGVwKzE7CiAgICB9CiAgICAKICAgIHZvaWQgcHJpbnQoaW50ICogcCwgaW50IG4pCiAgICB7CiAgICAgICAgaWYgKG4gPT0gMCkgcmV0dXJuOwogICAgICAgIHByaW50KHAscFtuXSk7CiAgICAgICAgY291dCA8PCBuIDw8ICIgICI7CiAgICB9CiAgICAKICAgIAogICAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCiAgICB7CiAgICAgICAgY291dCA8PCBnZXRTb2woMTA5KSA8PCBlbmRsOwogICAgCiAgICAgICAgcHJpbnQocHIsMTA5KTsKICAgIAogICAgfQoK