added disjoint set data type, with tests