#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int mod=998244353; const int dx[]={1,0,0,-1},dy[]={0,1,-1,0}; int dist[10001]; int main(){ int n; cin>>n; fill(dist+2,dist+n+1,-1); dist[1]=1; queueque; que.push(1); while(que.size()){ int v=que.front(); que.pop(); int pc=__builtin_popcount(v); if(v+pc<=n&&dist[v+pc]==-1){ dist[v+pc]=dist[v]+1; que.push(v+pc); } if(v-pc>=1&&dist[v-pc]==-1){ dist[v-pc]=dist[v]+1; que.push(v-pc); } } cout<