//#include<stdio.h>
//int n, arr[505][505] = {},pandas[505][505] = {};
//int panda(a, b)
//{
// if(a == 0||a == n||b == 0|| b == n)
// {
// return;
// }
// else
// {
// pandas[a][b]++;
// panda(a-1, b);
// panda(a+1, b);
// panda(a, b-1);
// panda(a, b+1);
// }
//}
//int main()
//{
// int i, j;
// scanf("%d", &n);
// for(i=0;i<n;i++)
// {
// for(j=0;j<n;j++)
// {
// scanf("%d",&arr[i][j]);
// }
// }
// for(i=0;i<n;i++)
// {
// for(j=0;j<n;j++)
// {
// print("%d", panda(i,j));
// }
// }
// return 0;
//}
//#include<stdio.h>
//#define min(a,b) (((a) < (b)) ? (a): (b))
//int dp[100001] = {};
//int main()
//{
// int n, i, j;
// scanf("%d", &n);
// for (i = 0; i <= n; i++)
// {
// dp[i] = i;
// }
// for (i = 1; i <= n; i++)
// {
// for (j = 1; j * j <= i; j++)
// {
// dp[i] = min(dp[i], dp[i - j * j] + 1);
// }
// }
// printf("%d", dp[n]);
// return 0;
//}
//#include<stdio.h>
//int cnt = 0, l;
//void func(int k,int c)
//{
// if(c < l * 2)
// {
// if(k+1<= l)
// {
// func(i+1, c+1);
// }
// if(k >= 1)
// {
// func(i-1, c+1);
// }
// }
// else if(k == 0)
// {
// cnt++;
// }
//}
//int main()
//{
// int t, i;
// scanf("%d", &t);
// for(i=0;i<t;i++)
// {
// scanf("%d", &l);
// if(l % 2 == 1)
// {
// printf("0");
// continue;
// }
// else
// {
// l /= 2;
// func(1,1);
// printf("%d", cnt);
// }
// }
// return 0;
//}
//#include<stdio.h>
//int main()
//{
// int a,b;
// scanf("%d %d",&a,&b);
// printf("%d",a<<b);
// return 0;
//}
a,r,b=1;main(){for(scanf("%d",&a);a>b*4;a-=b*=2,r+=2);r+=a/b;for(;a%=b;a>>=1)r+=a&1;printf("%d",r);}
# r, c, w = map(int, input().split())
# pascal = [[0 for j in range(31)] for i in range(31)]
# result = 0
# cnt = 1
# for i in range(31):
# for j in range(i+1):
# if i == 0 or j == 0 or j == i:
# pascal[i][j] = 1
# else:
# pascal[i][j] = pascal[i-1][j-1] + pascal[i-1][j]
# for i in range(r-1, r+w-1):
# for j in range(c-1, c+cnt-1):
# result += pascal[i][j]
# cnt += 1
# print(result)
# n, m = map(int, input().split())
# k = int(input())
# dp = []
# for i in range(k):
# a, b, c, d = map(int, input().split())
# dp.append([a, b, c, d])
# print(dp)
# from math import sqrt
# n = int(input())
# i = int(sqrt(n))
# ans = 0
# while n > 0:
# while n > i * i:
# if n > i * i:
# n -= i * i
# ans += 1
# i -= 1
# print(ans)
# def func(i, c):
# if c < l:
# if i + 1 <= n:
# func(i+1, c+1)
# if i >= 1:
# func(i-1, c+1)
# elif i == 0:
# cnt += 1
#
#
# t = int(input())
# dp = []
# cnt = 0
# for i in range(t):
# l = int(input())
# if l % 2 == 1:
# print(0)
# continue
# else:
# n = int(l//2)
# func(1, 1)
# dp = [0 for i in range(5001)]
# dp[0] = 1
#
# for i in range(2, 5001, 2):
# for j in range(2, i + 1, 2):
# dp[i] += dp[j - 2] * dp[i - j]
# dp[i] %= 1000000007
#
# t = int(input())
# for i in range(t):
# l = int(input())
# print(dp[l])