sclass TreeSetWithDuplicates { TreeSet> internal; Comparator comparator; *(Comparator *comparator) { internal = new TreeSet>((setA, setB) -> { ret comparator.compare(main first(setA), main first(setB)); }); } void add(A a) { Set newSet = lithashset(a); Set found = navigableSet_find(internal, newSet); if (found != null) found.add(a); else internal.add(newSet); } void remove(A a) { Set newSet = lithashset(a); Set found = navigableSet_find(internal, newSet); if (found == null) ret; found.remove(a); if (empty(found)) internal.remove(found); } A first() { ret main first(main first(internal)); } }