         working = result
         result = [:]
         result.reserveCapacity(working.count)
+    }
+    
+    static func identity(size n: Int) -> RowEliminationWorker<R> {
+        let comps = (0 ..< n).map { i in (i, i, R.identity) }
+        return RowEliminationWorker(size: (n, n), components: comps)
     }
 
     // for test

            fatalError("attempt to add from empty row: \(i1)")
        }
        
        guard let toHead = working[i2] else {
            fatalError("attempt to add into empty row: \(i2)")
        }
        
        var (from, to) = (fromHead, toHead)
        
        // must not insert before head
        assert(to.value.index <= from.value.index)
        
        while true {
            // from: ------------->●--->○-------->
            //   to: -->●----->○------------>○--->
            

        return working.isEmpty
    }
    
    var resultData: MatrixData<R> {
        return Dictionary(pairs: (result + working).flatMap{ (i, list) -> [(MatrixCoord, R)] in
            list.map{ c in
                let (j, a) = c.value
                return (MatrixCoord(i, j), a)
            }
        })
    }
    
