arr=array[1..503] of integer;
var
n,sum,i,j:longint;
a:arr;
function p(n:longint):arr;
var
i,j,k,l,max:longint;
b,c:arr;
begin
fillchar(p,sizeof(p),0);
if n=0 then begin p[1]:=1; exit; end;
fillchar(c,sizeof(c),0);
b:=p(n div 2);
max:=-1;
for i:=500 downto 1 do if b[i]>0 then begin k:=i; break; end;
for i:=1 to k do
begin
for j:=1 to k do
if i+j-1<=500
then
begin
c[i+j-1]:=c[i+j-1]+b[i]*b[j];
l:=i+j-1;
while (l<=500) and (c[l]>=10) do
begin
c[l+1]:=c[l+1]+(c[l] div 10);
c[l]:=c[l] mod 10;
inc(l);
end;
if max<l then max:=l;
end
else break;
end;
if n mod 2=1 then
begin
for i:=1 to max do c[i]:=2*c[i];
for i:=1 to max do
if c[i]>=10 then
begin
c[i+1]:=c[i+1]+(c[i] div 10);
c[i]:=c[i] mod 10;
end;
end;
p:=c;
end;
begin
read(n);
writeln(trunc(ln(2)/ln(10)*n)+1);
a:=p(n);
sum:=1;
a[1]:=a[1]-1;
while a[sum]<0 do begin dec(a[sum+1]); a[sum]:=9; inc(sum);end;
for i:=500 downto 1 do write(a[i]);
writeln;
end.