code: private Node<E> _link(Node<E> node1, Node<E> node2) {
  	// maybe there is no real unification here
  	if(node1 == node2) return node2;
  	// from now on, we know that we unify really disjoint trees
  	if(node1.rank > node2.rank) {
  	    node2.parent = node1;
  	    node1.nbElems += node2.nbElems; 
  	    return node1;
  	}
  	else {
  	    node1.parent = node2;
  	    if (node1.rank == node2.rank) {
  		node2.rank++;
  	    }
  	    node2.nbElems += node1.nbElems;
  	    return node2;
  	}
      }
docs: Unifies the tree rooted in node1 with the tree rooted in
  node2, by making one of them the subtree of the other one;
  returns the root of the new tree.