#include <stdio.h>

//指数运算
_int64 _pow(int base,int p)
{
	int i=0;
	_int64 ret=1;
	if (p==0) return 1;
    for(i=1;i<=p;i++)
	{
		ret=ret*base;
	}
	return ret;
}
//把一个大的_int64拆分成2个小的_int64
void  long2short(_int64 source,_int64* high,_int64* lower)
{
	*lower=source % 1000000000;
	*high=source/1000000000;
}
//判断一个_int64的长度
int longintlen(_int64 source)
{
	int tmp=0;
	while(source>0)
	{
		source/=10;
		tmp++;
	}
	return tmp;
}
//把2个_int64合成一个大的_int64
//目标返回值需要调用者分配内存并初始化'\0'
void  longint2char(_int64 high,_int64 lower,char dest[])
{
	int hlen=longintlen(high);
    int wlen=longintlen(lower);
    while(lower>0)
	{
		dest[hlen+wlen-1]=lower%10+0x30;
		lower/=10;
		wlen--;
	}
    while(high>0)
	{
		dest[hlen-1]=high%10+0x30;
		high/=10;
		hlen--;
	}
}

int main()
{
    int k;
	_int64 sum=0,tmp=0;
	char dest[20]={'\0'};
	for(k=0;k<63;k++)
	{
		tmp=_pow(2,k);
		sum+=tmp;
	}
	_int64 _h,_l;
	long2short(sum,&_h,&_l);   //将超大数拆分成2个小大数
	_int64 _l2=_l*2+1;         //对低端小大数进行计算
	int flag=_l2/1000000000;   //保存进位
	_l2=_l2 % 1000000000;      //去除进位
	_int64 _h2=_h*2+flag;      //对高端小大数进行计算
	longint2char(_h2,_l2,dest);//将小大数再次合成超大数
 	printf("%s\n",&dest[0]);
    return 0;
}