docs: void countNonZeroUsingLinkedList( int parent[] , int ll[] ) {
  
          Arrays.fill(pinv,0,m,-1);
          nz_in_V = 0;
          m2 = m;
  
          for (int k = 0; k < n; k++) {
              int i = ll[head+k];           // remove row i from queue k
              nz_in_V++;                    // count V(k,k) as nonzero
              if( i < 0)                    // add a fictitious row since there are no nz elements
                  i = m2++;
              pinv[i] = k;                  // associate row i with V(:,k)
              if( --ll[nque+k] <= 0 )
                  continue;
              nz_in_V += ll[nque+k];
              int pa;
              if( (pa = parent[k]) != -1 ) { // move all rows to parent of k
                  if( ll[nque+pa] == 0)
                      ll[tail+pa] = ll[tail+k];
                  ll[next+ll[tail+k]] = ll[head+pa];
                  ll[head+pa] = ll[next+i];
                  ll[nque+pa] += ll[nque+k];
              }
          }
          for (int i = 0, k = n; i < m; i++) {
              if( pinv[i] < 0 )
                  pinv[i] = k++;
          }
  
          if( nz_in_V < 0)
              throw new RuntimeException("Too many elements. Numerical overflow in V counts");
      }