idiomatic disjoint set