type vector =array[0..1010] of integer;
var b,a,c,v1,v2,vn,v,d :vector;
lgv,lga,lgb,lgc,lgv1,lgv2,lgd,lgvn,z : integer;
i,j,n : integer;
f,g : text;
cc : char;
function mult(a,b : integer):longint;
var rez : longint;
begin
rez:=0;
while a<>0 do
begin
if a and 1=1 then rez:=rez+b;
a:=a shr 1;
b:=b shl 1;
end;
mult:=rez;
end;
procedure inmultire(var c : vector;a : vector;var lga : integer;b:vector;lgb:integer);
var i,j,t : integer;
begin
for i:=1 to lga do
for j:=1 to lgb do
c[j+i-1]:=c[j+i-1]+mult(a[i],b[j]);
t:=0;
for i:=1 to lga+lgb-1 do
begin
c[i]:=c[i]+t;
t:=c[i] div 10;
c[i]:=c[i] mod 10;
end;
z:=lga+lgb-1;
if t <>0 then
begin
c[lga+lgb]:=t;
inc(z);
end;
end;
procedure adunare(var a: vector;b : vector;var lga:integer;lgb :integer);
var i,t : integer;
begin
t:=0; i:=1;
while (i<=lga)or(i<=lgb)or(t<>0)do
begin
t:=t div 10;
t:=t+a[i]+b[i];
a[i]:=t mod 10;
inc(i);
end;
dec(i,2);
lga:=i;
if a[i]=0 then lga:=i-1;
end;
procedure scadere(var a: vector;b : vector;var lga:integer;lgb :integer);
var i,t : integer;
begin
t:=0;
for i:=1 to lga do
begin
a[i]:=t+a[i]+10-b[i];
dec(a[i+1]);
t:=a[i] div 10;
a[i]:=a[i] mod 10;
end;
while (lga>1)and(a[lga]=0)do
dec(lga);
a[lga+1]:=0;
end;
begin
assign(f,'sarpe.in');reset(f);
assign(g,'sarpe.out');rewrite(g);
while not eof(f) do
begin
while not eoln(f) do
begin
read(f,cc);
inc(n);
vn[n]:=ord(cc)-48;
end;
readln(f);
end;
for i:=1 to n div 2 do
begin
vn[i]:=vn[i] xor vn[n-i+1];
vn[n-i+1]:=vn[n-i+1] xor vn[i];
vn[i]:=vn[i] xor vn[n-i+1];
end;
b[1]:=1;lgb:=1;
v1:=vn; lgv1:=n;
scadere(v1,b,lgv1,lgb); { in v1 am n-1 }
v2:=vn; lgv1:=n;
b[1]:=2; lgv2:=n;
scadere(v2,b,lgv2,lgb); { in v2 am n-2 }
inmultire(c,v1,lgv1,v2,lgv2); { in c am (n-1)(n-2) };
lgc:=z;
inmultire(d,c,lgc,b,lgb); { in d am 2(n-1)(n-2) };
lgd:=z;
b[1]:=4;
inmultire(v,vn,n,b,lgb);
lgv:=z;
adunare(v,d,lgv,lgd);
for j:=lgv downto 1 do write(g,v[j]);
writeln(g);
close(g);
end.