   function [L, List, tree] = symb(A)
%% function [L, List, tree] = symb(A)
%% symbolic factorization 
%% on return:
%% L       = filled graph (lower part only)
%% List{i} = list of nodes that update col. i
%%         = list of children of node i in tree
%% tree    = parent list of elimination tree
%%----------------------------------------     
 n = size(A,1);
%%-------------------- strict lower part of A     
 L = abs(tril(A,-1));
 tree = zeros(1,n);
%%---------------cells for lists in each node 
 List = cell(n,1);
 for j=1:n
   jList = List{j};
%%--------------------union of patterns
   for  l=1:length(jList);
     L(j+1:n,j)=L(j+1:n,j)+L(j+1:n,jList(l));
   end
   [ii, ~ , ~ ] = find(L(:,j)); 
%%-----------------find parent and update list
   if (length(ii)>0)
     p = min(ii); 
     List{p} = union(List{p},j);
%%-------------------- parent of j == p
     tree(j) = p;
   end
 end
