program labirintas;
  { 135 u‘davinys }

  uses labir;
  type kryptys = (kair, pirm, des, atg);
       salys = (vak, siaur, ryt, piet);

  function pred_s (salis : salys) : salys;
  begin
    if salis = vak
       then pred_s := piet
       else pred_s := pred (salis);
  end;

  function succ_s (salis : salys) : salys;
  begin
    if salis = piet
       then succ_s := vak
       else succ_s := succ (salis);
  end;

  function galima (kryptis : kryptys; salis : salys) : boolean;
    { nustato, ar galima eiti nurodyta kryptimi, jei ‘mogus veidu }
    { atsisukŠs kryptimi 'salis' }
  begin
    case kryptis of
     kair : salis := pred_s (salis);
     des : salis := succ_s (salis);
     atg : salis := pred_s (pred_s (salis));
    end;
    case salis of
      vak : galima := vakarai;
      siaur : galima := siaure;
      piet : galima := pietus;
      ryt : galima := rytai;
    end;
  end;

  procedure eiti (kryptis : kryptys; var salis : salys);
    { atliekamas ‚jimas nutrodyta kryptimi }
    { rezultatas - pasaulio žalis,  kuri… lieka atsisukŠs ‘mogus }
    { po ‚jimo }
  begin
    case kryptis of
      kair : kairen;
      des : desinen;
      atg : atgal;
      pirm : pirmyn;
    end;
    case kryptis of
     kair : salis := pred_s (salis);
     des : salis := succ_s (salis);
     atg : salis := pred_s (pred_s (salis));
    end;
  end;

  var kryptis : kryptys;
      paeita : boolean;
      salis : salys;
begin
  { nustatoma kuria kryptimi ‘i–ri ‘mogus stovintis labirinto }
  { ‚jime }
  if siaure
     then salis := siaur
     else if pietus
             then salis := piet
             else if rytai
                     then salis := ryt
                     else salis := vak;
 { kol neiž‚jome iž labirinto }
 while true do
   begin
     kryptis := kair; { bandysime eiti  kairŠ }
     paeita := false;
     while not paeita do
       if galima (kryptis, salis) { jei galima paeiti žia kryptimi }
          then begin
                 eiti (kryptis, salis);
                 paeita := true;
               end
          else kryptis := succ (kryptis);
   end;
end.