program Zatvorky;
{Program zisti, ci je spravne uzatvorkovany vyraz.
 Pouzite su tri duhy zatvoriek.
 Prechadza postupne vyrazom a do zasobnika(stack) si uklada
 vsetky lave zatvorky.Ak najde pravu, tak sa pozrie ci na konci zasobnika
 je prisluchajuca lava zatvorka.
 Ak je,tak ju vymaze.Ak nie, tak cyklus skonci-nie je spravne uzatvorkovana.
 Na konci musi byt este zasobnik prazdny,ak by som mal viac lavych zatvoriek. }
var s:string;
    a,p:integer;
    stack:array [1..100] of char;
    d:boolean;
begin
writeln('zadaj postupnost zatvoriek');
readln (s);
d:=true;
a:=0;
p:=0;
repeat
a:=a+1;
if s[a]='(' then  begin
                  p:=p+1;
                  stack[p]:='(';
                  end;
if s[a]='{'then begin
                p:=p+1;
                stack[p]:='{';
                end;
if s[a]='[' then begin
                 p:=p+1;
                 stack[p]:='[';
                 end;
if s[a]=')' then if stack[p]='(' then p:=p-1
                                 else d:=false;
if s[a]='}' then if stack[p]='{' then  p:=p-1
                                  else d:=false;
if s[a]=']' then if stack[p]='[' then p:=p-1
                                 else d:=false;

until (a=length(s)) or (d=false);


if (d=false) or (p>0) then writeln ('nie je spravne uzatvorkovana')
             else writeln ('je spravne uzatvorkovana');
end.