   function [L, List, tree] = symb(A)
%% function [L, List, tree] = symb(A)
%% symbolic factorization
%% on return: L = filled graph (lower part)
%% List{i} = list of nodes that update col. i
%% tree = elimination tree (parent list)
 n = size(A,1);
 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} = [List{p},j];
     tree(j) = p;
   end
 end
