const
maxn=1000;
var n:longint;
i,j:longint;
a:array[1..maxn] of longint;
b:array[1..maxn] of longint;
procedure solve(n:longint);
begin
if n=0 then exit;
solve(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;
for i:=1 to 1000 do b[i]:=0;
end;
begin
readln(n);
writeln(trunc(ln(2)/ln(10)*n)+1);
a[1]:=1;
solve(n);
for i:=500 downto 2 do
begin
write(a[i]);
end;
writeln(a[1]-1);
end.
maxn=1000;
var n:longint;
i,j:longint;
a:array[1..maxn] of longint;
b:array[1..maxn] of longint;
procedure solve(n:longint);
begin
if n=0 then exit;
solve(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;
for i:=1 to 1000 do b[i]:=0;
end;
begin
readln(n);
writeln(trunc(ln(2)/ln(10)*n)+1);
a[1]:=1;
solve(n);
for i:=500 downto 2 do
begin
write(a[i]);
end;
writeln(a[1]-1);
end.