#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define REP(i,n) for(ll i=0; i<(n); ++i) #define TEN(x) ((ll)1e##x) #define ALL(v) (v).begin(), (v).end() int main() { ll n; cin >> n; vector visited(n+1, false); queue>> que; que.push({1, 1}); while (!que.empty()) { ll d; bitset<14> current; tie(d,current) = que.front(); que.pop(); if (visited[current.to_ulong()]) continue; visited[current.to_ulong()] = true; if (current.to_ulong() == n) { cout << d << endl; return 0; } ll c = current.count(); if ((ll)current.to_ulong() - c >= 1) que.push({d+1, (ll)current.to_ulong() - c}); if (current.to_ulong() + c <= n) que.push({d+1, current.to_ulong() + c}); } cout << -1 << endl; return 0; }