program reiskinys;

  const PR = 'REISK5.DAT';
        MAX = 256;
  type sk_lent = array [1..MAX] of integer;
       log_lent = array [1..MAX] of boolean;

  procedure keisti (var reis: string);
    { kintamuosius vardus pakei‡ia  'a',
       atimt -  sud‚t, dalyb… -  daugyb… }
    var i: integer;
  begin
    for i := 1 to length(reis) do
      if reis[i] in ['a'..'z']
         then reis[i] := 'a'
         else if reis[i] = '-'
                 then reis[i] := '+'
                 else if reis[i] = '/'
                         then reis[i] := '*';
  end; { keisti }

  procedure rasti_gyli (reis: string; var gylis: sk_lent);
    { randa kiekvieno simbolio gyl }
    var i, gyl: integer;
  begin
    gyl := 1;  { pirmojo simbolio gylis }
    for i := 1 to length (reis) do
      begin
        if reis[i] = '(' then gyl := gyl + 1;
        gylis[i] := gyl;
        if reis[i] = ')' then gyl := gyl - 1;
      end;
  end; { rasti_gyl }

  function ribose (reis: string; x: integer): boolean;
  begin
    ribose := (1 <= x) and (x <= length(reis))
  end; { ribose }

  procedure paeiti (nuo, gyl: integer; gylis: sk_lent; reis: string;
                    pirmyn: boolean; var blokas: sk_lent);
  begin
    while ribose(reis, nuo) and (gylis[nuo] >= gyl) and
          ((reis[nuo] <> '+') or (gylis[nuo] > gyl)) do
      begin
        blokas[nuo] := blokas[nuo] + 1;
        if pirmyn
           then nuo := nuo + 1
           else nuo := nuo - 1;
      end;
  end; { paeiti }

  procedure skaidyti_blokais (gylis: sk_lent;
                              reis: string; var blokas: sk_lent);
    { ižskaido reižkin  blokus }
    var i: integer;
  begin
    for i := 1 to length(reis) do
      blokas[i] := 1;
    for i := 2 to length(reis)-1 do
       if reis[i] = '*'
          then begin
                  blokas[i] := blokas[i] + 1;
                  paeiti (i-1, gylis[i], gylis, reis, false, blokas);
                  paeiti (i+1, gylis[i], gylis, reis, true, blokas);
               end; { if }
  end; { skaidyti_blokais }

  procedure atlikti_oper (var reis: string; var naud: log_lent);
   { atlieka visas operacijas, kurias galima atlikti per vien… laiko moment… }
    var gylis, blokas: sk_lent;
       i, iki: integer;
       rasta, tas_pats_blokas: boolean;
  begin
    rasti_gyli (reis, gylis);
    skaidyti_blokais (gylis, reis, blokas);
    i := 1;
    while i <= length(reis)-1 do
      if (reis[i] = 'a') and naud[i]
       then begin
             { iežkome artimiausio kintamojo, kurio gylis ir blokas sutapt— }
             rasta := false; tas_pats_blokas := true;
             iki := i;
             while (iki+1 <= length(reis)) and tas_pats_blokas
                   and not rasta and (gylis[i] <= gylis[iki]) do
               begin
                 iki := iki + 1;
                 tas_pats_blokas := blokas[iki] >= blokas[i];
                 rasta := (gylis[i] = gylis[iki]) and tas_pats_blokas and
                          (blokas[i] = blokas[iki]) and (reis[iki] = 'a')
                          and naud[iki];
               end;
                if rasta then begin
                                naud[iki-1] := false;
                                naud[iki] := false;
                              end;
                i := i + 1;
              end
           else i := i + 1;
  end; { atlikti_oper }

  function skaiciuoti (reis: string): integer;
    var num, kiek, i: integer;
        reik: log_lent;
  begin
    keisti (reis); { suvienodinami kintam—j— vardai }
    kiek := 0;     { laiko vienet— skai‡ius }
    while reis <> 'a' do
      begin
        for i := 1 to length(reis) do
          reik[i] := true; { visus reižkinio simbolius galima naudoti }
        atlikti_oper (reis, reik);
        num := 1;         { pažaliname nebereikalingus reižkinio simbolius }
        for i := 1 to length(reis) do
            if not reik[i]  then delete(reis, num, 1)
                            else num := num + 1;
        { ižmetame nereikalingus skliaustus }
        for i := 1 to length(reis)-2 do
          if (reis[i] = '(') and (reis[i+2] = ')')
             then begin
                    delete (reis, i+2, 1);
                    delete (reis, i, 1);
                  end;
        kiek := kiek + 1;
      end;
    skaiciuoti := kiek;
  end; { skai‡iuoti }

  procedure skaityti (var reis: string);
    var f: text;
  begin
    assign (f, PR);
    reset (f);
    readln (f, reis);
    close (f);
  end; { skaityti }

  var reis: string;
      rez: integer;
begin
  skaityti (reis);
  rez := skaiciuoti (reis);
  writeln (rez);
end.