#include <iostream>
#include <iomanip>
#include <cmath>
#include <map>
using namespace std;
const int MAXSIZE = 1000000000;
map<int,unsigned char> m;
int count(int x, int level = 0, int curmin = MAXSIZE)
{
if (level > curmin) return -1; // Отсечение - нет смысла лезть вглубь
// при наличии более короткого решения
if (x == 1) return 0;
if (m[x])
{
return m[x]; // Сохраненное значение
}
int res = MAXSIZE;
for(int i = sqrt(x)+0.1; i >= 1; --i)
{
if (x%i) continue;
int k = count(i+x/i-2, level+1, res);
if (k < 0) continue;
if (k < res) { res = k; }
}
return m[x] = res+1;
};
int main(int argc, const char * argv[])
{
int n = (argc > 1) ? atoi(argv[1]) : MAXSIZE;
if (n > MAXSIZE) n = MAXSIZE;
cout << n << ": " << count(n) << endl;
int cur = m[n];
while (n > 1)
{
for(int i = 1; i*i <= n; ++i)
{
if (n%i) continue;
if (m[i+n/i-2] == cur-1)
{
n = i+n/i-2;
--cur;
cout << i << " ";
break;
}
}
}
cout << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8bWFwPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBNQVhTSVpFID0gMTAwMDAwMDAwMDsKCm1hcDxpbnQsdW5zaWduZWQgY2hhcj4gbTsKCmludCBjb3VudChpbnQgeCwgaW50IGxldmVsID0gMCwgaW50IGN1cm1pbiA9IE1BWFNJWkUpCnsKICAgIGlmIChsZXZlbCA+IGN1cm1pbikgcmV0dXJuIC0xOyAvLyDQntGC0YHQtdGH0LXQvdC40LUgLSDQvdC10YIg0YHQvNGL0YHQu9CwINC70LXQt9GC0Ywg0LLQs9C70YPQsdGMCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0L/RgNC4INC90LDQu9C40YfQuNC4INCx0L7Qu9C10LUg0LrQvtGA0L7RgtC60L7Qs9C+INGA0LXRiNC10L3QuNGPCiAgICBpZiAoeCA9PSAxKSByZXR1cm4gMDsKICAgIGlmIChtW3hdKQogICAgewogICAgICAgIHJldHVybiBtW3hdOyAgICAgICAgICAgICAgIC8vINCh0L7RhdGA0LDQvdC10L3QvdC+0LUg0LfQvdCw0YfQtdC90LjQtQogICAgfQogICAgaW50IHJlcyA9IE1BWFNJWkU7CiAgICBmb3IoaW50IGkgPSBzcXJ0KHgpKzAuMTsgaSA+PSAxOyAtLWkpCiAgICB7CiAgICAgICAgaWYgKHglaSkgY29udGludWU7CiAgICAgICAgaW50IGsgPSBjb3VudChpK3gvaS0yLCBsZXZlbCsxLCByZXMpOwogICAgICAgIGlmIChrIDwgMCkgY29udGludWU7CiAgICAgICAgaWYgKGsgPCByZXMpIHsgcmVzID0gazsgfQogICAgfQogICAgcmV0dXJuIG1beF0gPSByZXMrMTsKfTsKCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CiAgICBpbnQgbiA9IChhcmdjID4gMSkgPyBhdG9pKGFyZ3ZbMV0pIDogTUFYU0laRTsKICAgIGlmIChuID4gTUFYU0laRSkgbiA9IE1BWFNJWkU7CiAgICBjb3V0IDw8IG4gPDwgIjogICIgPDwgY291bnQobikgPDwgZW5kbDsKCiAgICBpbnQgY3VyID0gbVtuXTsKICAgIHdoaWxlIChuID4gMSkKICAgIHsKICAgICAgICBmb3IoaW50IGkgPSAxOyBpKmkgPD0gbjsgKytpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKG4laSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtW2krbi9pLTJdID09IGN1ci0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuID0gaStuL2ktMjsKICAgICAgICAgICAgICAgIC0tY3VyOwogICAgICAgICAgICAgICAgY291dCA8PCBpIDw8ICIgIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBlbmRsOwp9