code: func Union(forests *Forests, ds1, ds2 *DisjointSet) {
  	newDS := &DisjointSet{}
  	newDS.represent = ds1.represent
  	newDS.members = ds1.members
  	for k := range ds2.members {
  		newDS.members[k] = struct{}{}
  	}
  	forests.mu.Lock()
  	defer forests.mu.Unlock()
  	forests.data[newDS] = struct{}{}
  	delete(forests.data, ds1)
  	delete(forests.data, ds2)
  }
docs: // Union unions two DisjointSet, with ds1's represent.