{$R+,Q+}

{$APPTYPE CONSOLE}

const
  N = 100000;
  BASE = 1000000000; //основание системы счисления, в которой мы храним числа (степень 10)
  BLEN = 9; //число нулей в основании 

type

  //тип для представления длинных чисел
  bignum = record
    len: Integer; //число разрядов числа
    d: array[1..N] of Integer; //само число - хранится от младших разрядов к старшим
    //неиспользуемые разряды должны быть заполнены нулями
  end;

//конструирование длиного числа из строки
procedure strtobig(s: string; var a: bignum);
var
  i: integer; //очередная позиция в числе
  j: integer; //очередной разряд в числе
  t: Integer; //очередная формируемая цифра
  k: integer;
begin
  fillchar(a, sizeof(a), 0);
  if length(s) mod BLEN = 0 then a.len := length(s) div BLEN else a.len := length(s) div BLEN + 1;
  i := length(s); j:=1;
  while i>=1 do begin
    //отсчитываем очередные BLEN разрядов
    t := 0;
    for k:=i-(BLEN-1) to i do
    begin
      if k<1 then continue; 
      t := t * 10 + ord(s[k]) - ord('0');
    end;
    a.d[j] := t;
    j := j + 1;
    i := i - BLEN;
  end;
end;

//печать числа
procedure bigprint(var a: bignum);
var
  i,j: Integer;
  t: Integer; //очередная рассматриваемая цифра
  c: array[1..BLEN] of Integer;
begin
  //выводим старшую цифру
  write(a.d[a.len]);
  //выводим остальные цифры с ведущими нулями
  for i:=a.len-1 downto 1 do 
  begin
    t := a.d[i];
    for j:=1 to BLEN do 
    begin
      c[j] := t mod 10;
      t := t div 10;
    end;
    for j:=BLEN downto 1 do write(c[j]);
  end;
  writeln;
end;

//сложение короткого с длинным
procedure bigaddsmall(var a: bignum; c: integer);
var
  i: integer;
  r: int64;
begin
  for i:=1 to a.len do
  begin
    r := int64(a.d[i]) + c;
    a.d[i] := r mod BASE;
    c := r div BASE;
    if c=0 then exit;
  end;
  assert(c<BASE,'c>=BASE');
  a.d[a.len+1] := c;
  inc(a.len);
end;

//умножение длинного на короткое
procedure bigmultsmall(var a: bignum; p: integer);
var
  i: integer;
  r,c: int64;
begin
  c := 0;
  for i:=1 to a.len do
  begin
    r := int64(a.d[i]) * p + c;
    a.d[i] := r mod BASE;
    c := r div BASE;
  end;
  if c=0 then exit;
  assert(c<BASE,'c>=BASE');
  a.d[a.len+1] := c;
  inc(a.len);
end;

const
  p_2_29 = 536870912;

var
  s: string;
  i,j,k: integer;
  a: bignum;

begin
//  assign(input,'input.txt'); reset(input);
//  assign(output,'output.txt'); rewrite(output);
  readln(s);
  while length(s) mod 29 > 0 do s:='0' + s;
  strtobig('0',a);
  i:=0;
  while i<length(s) do
  begin
    j:=0;
    k:=0;
    while (j<29) and (i<length(s)) do
    begin
      inc(j); inc(i);
      k:=k*2+ord(s[i])-ord('0');
    end;
    bigmultsmall(a,p_2_29);
    bigaddsmall(a,k);
  end;
  bigprint(a);
end.
