         log("cycle-free-pivots: \(pivots.count)")
     }
     
-    private func findCycleFreePivot(inRow row: (Int, LinkedList<RowEntity>), pivots: [Int : Int]) -> (Int, Int)? {
+    private func findCycleFreePivot(inRow row: (Int, Row), pivots: [Int : Int]) -> (Int, Int, R)? {
         let (i, list) = row
         
         var queue: [Int] = []
         var candidates: Set<Int> = []
+        var values: [Int : R] = [:]
         var visited: Set<Int> = []
         
         // initialize

        rows.parallelForEach { row in
            var found = false
            while !found {
                let pivotsLocal = atomic.sync { self.pivots }
                let nPivLocal = pivotsLocal.count
                
                guard let pivot = self.findCycleFreePivot(inRow: row, pivots: pivotsLocal) else {

    
    private func findCycleFreePivots() {
        let n = size.rows
        let rows = (0 ..< n).compactMap { i -> (Int, Row)? in
            if pivotRows.contains(i) {
                return nil
            }
