#include<cstdio>
#include<cstring>
using namespace std;
int n, a[14];
bool dfs(int d, int maxd)
{
if (a[d] == n)
return true;
if (d == maxd)
return false;
int maxv = -1;
for(int i=0;i<=d;i++)
if (maxv < a[i])
{
maxv = a[i];
}
if ((maxv << (maxd - d)) < n)
return false;
for (int i = d; i >= 0; i--)
{
a[d + 1] = a[d] + a[i];
if(dfs(d + 1, maxd))
return true;
a[d + 1] = a[d] - a[i];
if (dfs(d + 1, maxd))
return true;
}
return false;
}
int solve(int n)
{
if (n == 1)
return 0;
a[0] = 1;
const int max_ans = 13;
for (int maxd = 1; maxd < max_ans; maxd++)
if (dfs(0, maxd))
return maxd;
return max_ans;
}
int main()
{
while (scanf("%d", &n) && n)
{
printf("%d\n", solve(n));
}
}