procedure mul;
begin
for i:=1 to lena do
begin
x:=0;
for j:=1 to lenb do
begin
x:=a[i]*b[j]+x div 10+c[i+j-1];
c[i+j-1]:=x mod 10;
end;
c[i+j]:=x div 10 ;
end;
lenc:=i+j;
while (lenc>1) and (c[lenc]=0) do dec(lenc);
if lenc>500 then lenc:=500;
lena:=lenc;a:=c;fillchar(c,sizeof(c),0);
end;
procedure di(n:integer);
begin
if n=0 then exit;
if odd(n) then
begin di(N div 2);b:=a;lenb:=lena;mul;
fillchar(b,sizeof(b),0);b[1]:=2;lenb:=1;mul;
end
else
begin di(N div 2);b:=a;lenb:=lena;mul;end ;
end;
begin
readln(n);
writeln(trunc(n*ln(2)/ln(10))+1);
fillchar(a,sizeof(a),0);lena:=1;
a[1]:=1;
di(n);
dec(a[1]);
for i:=500 downto 1 do write(a[i]);
end.
program p54;
var
a,b:array[1..1000]of longint;
n,i:longint;
procedure make(n:longint);
var
i,j:longint;
begin
if n=0
then exit;
make(n div 2);
for i:=1 to 500 do
for j:=1 to 500 do
if n mod 2=0
then b[i+j-1]:=b[i+j-1]+a[i]*a[j]
else b[i+j-1]:=b[i+j-1]+a[i]*a[j]*2;
for i:=1 to 500 do
begin
a[i]:=b[i] mod 10;
b[i+1]:=b[i+1]+b[i] div 10;
end;
fillchar(b,sizeof(b),0);
end;
begin
readln(n);
writeln(trunc(n*ln(2)/ln(10))+1);
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
a[1]:=1;
make(n);
for i:=500 downto 2 do
write(a[i]);
write(a[1]-1);
readln;
readln;
end.