list:=SmallGroups([240,300,336,360,420,480], func<x|not IsSolvable(x)>);

unknown:=[]; /*list of groups for which (BM) can not be proved via
Tools $\ref{toolA}$ and $\ref{toolB}$, empty at the start*/

for x in list do
         isplit:=false;
         splitknown:=false;
         
         /*we check whether x is a split extension of a group that is
         already known to verify (BM), by an abelian group*/

         for y in NormalSubgroups(x) do
             y1:=y`subgroup;
             if (IsAbelian(y1) and Order(y1) ge 2) then
                 m:=Index(x,y1);
                 for H in Subgroups(x:OrderEqual:=m) do
                     H1:=H`subgroup;
                     int:=H1 meet y1;
                     if Order(int) eq 1 then
                         isplit:=true;
                         idq:=IdentifyGroup(H1);
                         if not (idq in unknown) then
                             splitknown:=true;
                         end if;
                     end if;
                 end for;
             end if;
         end for;

         /*if the group is not a split extension by any abelian group,
         Tool $\ref{toolA}$ can not be used, so we add it to the 'unknown' list*/

         if (not isplit) then
             Append(~unknown,IdentifyGroup(x));
         end if;

         /*if the group is a split extension by an abelian group, of a
         group for which (BM) is unknown, we also add it to the 'unknown'
         list*/

         if isplit and (not splitknown) then
             Append(~unknown,IdentifyGroup(x));
         end if;

end for;

unknown;
