#include <bits/stdc++.h>
using namespace std;
long long n;
vector <string> ans;
vector <long long> vec;
void dp()
{
for(int i=4;i<=n;i++)
{
long long prev=vec[i-1];
if(i%2==0)
{
prev=min(vec[i/2],prev);
}
if(i%3==0)
{
prev=min(vec[i/3],prev);
}
vec[i]=prev;
if(i%2==0 && vec[i]==vec[i/2])
{
ans[i]=ans[i/2]+"2";
}
else if(i%3==0 && vec[i]==vec[i/3])
{
ans[i]=ans[i/3]+"3";
}
else
{
ans[i]=ans[i-1]+"1";
}
vec[i]++;
}
}
int main()
{
cin>>n;
if(n<=1)
{
return 0;
}
vec=vector <long long> (n+10);
ans=vector <string> (n+10,"");
ans[0]="";
ans[1]="";
ans[2]="2";
ans[3]="3";
vec[0]=0;
vec[1]=0;
vec[2]=1;
vec[3]=1;
dp();
cout<<ans[n];
return 0;
}
12 тестов из 19 проходит, по остальным ошибка при выполнении программы, вот ссылка на задачу Динамическое программирование