/*
This solution uses DFS and iterative deepening, a technique where we search one layer deeper for solutions in each iteration.
*/
#include <iostream>
using namespace std;
int n, exps[20];
bool dfs (int dep, int maxDep) {
if (dep > maxDep || exps[dep] << (maxDep - dep) < n) return false;
if (exps[dep] == n) return true;
for (int i = 0; i <= dep; i++) {
for (int j : {-1, 1}) {
exps[dep + 1] = exps[dep] + j * exps[i];
if (exps[dep + 1] > 0 && dfs(dep + 1, maxDep)) return true;
}
}
return false;
}
int main () {
while (cin >> n && n) {
for (int d = 0;; d++) {
exps[0] = 1;
if (dfs(0, d)) {
cout << d << endl;
break;
}
}
}
}
LyoKCVRoaXMgc29sdXRpb24gdXNlcyBERlMgYW5kIGl0ZXJhdGl2ZSBkZWVwZW5pbmcsIGEgdGVjaG5pcXVlIHdoZXJlIHdlIHNlYXJjaCBvbmUgbGF5ZXIgZGVlcGVyIGZvciBzb2x1dGlvbnMgaW4gZWFjaCBpdGVyYXRpb24uCiovCgojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbiwgZXhwc1syMF07CmJvb2wgZGZzIChpbnQgZGVwLCBpbnQgbWF4RGVwKSB7CiAgICBpZiAoZGVwID4gbWF4RGVwIHx8IGV4cHNbZGVwXSA8PCAobWF4RGVwIC0gZGVwKSA8IG4pIHJldHVybiBmYWxzZTsKICAgIGlmIChleHBzW2RlcF0gPT0gbikgcmV0dXJuIHRydWU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8PSBkZXA7IGkrKykgewogICAgICAgIGZvciAoaW50IGogOiB7LTEsIDF9KSB7CiAgICAgICAgICAgIGV4cHNbZGVwICsgMV0gPSBleHBzW2RlcF0gKyBqICogZXhwc1tpXTsKICAgICAgICAgICAgaWYgKGV4cHNbZGVwICsgMV0gPiAwICYmIGRmcyhkZXAgKyAxLCBtYXhEZXApKSByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmludCBtYWluICgpIHsKICAgIHdoaWxlIChjaW4gPj4gbiAmJiBuKSB7ICAgIAogICAgICAgIGZvciAoaW50IGQgPSAwOzsgZCsrKSB7CiAgICAgICAgICAgIGV4cHNbMF0gPSAxOwogICAgICAgICAgICBpZiAoZGZzKDAsIGQpKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8IGQgPDwgZW5kbDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9