 */
 
 private typealias Result = (length: Int, match: Bool)
-
-// Arrays of results are hashed so inserting prevents duplicates
 
 private func ==<T>(lhs: HashableArray<T>, rhs: HashableArray<T>) -> Bool {
     return lhs.array == rhs.array

        trace(a1, results, x, y, [T](), sequences)
    }
    
    return Array(sequences.sequences.keys).map{$0.array.reverse()}
}

}

private class LCSs<T: Hashable> {
    var sequences = Set<HashableArray<T>>()
}

// Returns all matches with the same length as the bottom right elements
