#include <bits/stdc++.h>
using
namespace
std;
pair<
int
,
int
> find_sequence(
int
n,
map<
int
, pair<
int
,
int
> >& map)
{
if
(n == 1)
return
make_pair(1, -1);
if
(map.find(n) != map.end())
return
map[n];
pair<
int
,
int
> ans = make_pair(
(find_sequence(n - 1, map).first + 1), n - 1);
if
(n % 2 == 0) {
pair<
int
,
int
> div_by_2 = find_sequence(n / 2, map);
if
(div_by_2.first < ans.first)
ans = make_pair(div_by_2.first + 1, n / 2);
}
if
(n % 3 == 0) {
pair<
int
,
int
> div_by_3 = find_sequence(n / 3, map);
if
(div_by_3.first < ans.first)
ans = make_pair(div_by_3.first + 1, n / 3);
}
map[n] = ans;
return
ans;
}
vector<
int
> find_solution(
int
n)
{
map<
int
, pair<
int
,
int
> > map;
pair<
int
,
int
> ans = find_sequence(n, map);
cout << ans.first << endl;
vector<
int
> sequence;
sequence.push_back(n);
while
(ans.second != -1) {
sequence.push_back(ans.second);
ans = find_sequence(ans.second, map);
}
reverse(sequence.begin(), sequence.end());
return
sequence;
}
int
main()
{
int
n = 5;
vector<
int
> seq = find_solution(n);
for
(
int
i = 0; i < seq.size(); i++)
cout << seq[i] <<
" "
;
}