 public struct Vertex: SetType, Comparable {
     public let id: Int
     public let label: String
+    
+    // TODO Vertex should be abstract.
+    //      Extract product structure.
     private let _components: [Vertex] // for product-vertex
     
     private init(_ label: String, _ components: [Vertex]) {

    }
    
    public init(prefix: String = "v") {
        self.init("\(prefix)\(list.count)")
    }
    
    public var hashValue: Int {

        if let v = productList[key] {
            return v
        } else {
            let label = "v\(components.map{ Format.sub($0.id) }.joined(separator: ","))"
            let v = Vertex(label, components)
            productList[key] = v
            return v
