Explain, with the help of the following program, the interactions between Ada's rules for task termination and its exception propagation model. Include a consideration of the program's behaviour (output) for initial values of the variable C of 2,1 and 0 .
with Ada.Text_Io; use Ada.Text_Io;
procedure Main is
task A;
task body $A$ is
C : Positive : = Some_Integer_Value;
procedure $\mathrm{P}(\mathrm{D}$ : Integer) is
task T;
A : Integer;
task body $\mathrm{T}$ is
begin
delay 10.0;
Put("T Finished"); New_Line;
end $\mathrm{T}$;
begin
Put ("P Started"); New_Line;
$\mathrm{A}:=42 / \mathrm{D}$;
Put ("P Finished"); New_Line;
end $\mathrm{P}$;
begin
Put ("A started"); New_Line;
$\mathrm{P}(\mathrm{C}-1)$;
Put("A Finished"); New_Line;
end $\mathrm{A}$;
begin
Put("Main Procedure Started"); New_Line;
exception
when others $\Rightarrow$
Put("Main Procedure Failed"); New_Line;
end Main;