program P(output);

   procedure R;
      label 88;

      procedure Fin(L2:integer);
	 begin writeln(' Fail(', L2:1, ')'); goto 88 end;

      procedure S(L:integer; procedure Fail(L2:integer));
	 label 99;

	 procedure FailHere(L2:integer);
	 begin
	    if L=L2 then begin writeln(' Fail(', L2:1, ')'); goto 99 end
	    else Fail(L2)
         end {FailHere};

      begin {S}
         write('enter S(', L:1, ') ');
	 if L<5 {say} then
	    S(L+1, FailHere)
         else Fail(2);
	 99: write('leave S(', L:1, ') ')
      end   {S};

   begin {R}
      S(1, Fin);
      88: {skip}
   end   {R};

begin
   R
end.

{\fB Variable Level Failure or Return. \fP}
