/*
据说这是最正确的解法,二进制所有的钱袋都可以看成一个取或不取的情况。
那么这些钱袋取或不取就可以看作0或1,也就是说,要使用一些数字表示一个范围里的所有数
同时这又很二进制(取或不取)。
所以我们就把钱袋里钱的数量定为2^n个。话说这种思路我怎么不明白原理额。。。。
*/
#include<cstdio>
int main()
{
int m,tot=0,ans[30];
scanf("%d",&m);
for(;m>>1;m>>=1)
ans[++tot]=(m>>1)+(m&1);
printf("%d\n",tot+1);
}
/*
所以还是这种乱搞的方法好啊,简洁通俗易懂还能通过!
其实这题并没有想象中地那么复杂
我们可以假象一下 若m=12 则需要求得组合方案有(1 2 3 4 ……12)
我们可以把他们分成两份 (1 2 …… 6) (7 8 ……12)称左边的为L 右边的为R
很容易得知R中的每种方案都可以由(12/2)+左边的组合得出
再次分成两份(1 2 3)(4 5 6)
同理 当m为奇数时 显而易见地 只需把 (m/2)改为(m/2+1) 即可
*/
#include<iostream>
#include<cstdio>
using namespace std;
long long n,m,ans,tot;
int a[1000001];//数组记录每个钱袋装的钱数,随时准备输出!哈哈
int main()
{
scanf("%d",&n);
while(n/2!=0)
{
tot++;
if(n%2==0)a[tot]=n/2;
if(n%2==1)a[tot]=n/2+1;
n/=2;
}
printf("%d\n",tot+1);
return 0;
}