code: func (t *Treap) split(n *node, s Item) (*node, *node, *node) {
  	if n == nil {
  		return nil, nil, nil
  	}
  	c := t.compare(s, n.item)
  	if c == 0 {
  		return n.left, n, n.right
  	}
  	if c < 0 {
  		left, middle, right := t.split(n.left, s)
  		return left, middle, &node{
  			item:     n.item,
  			priority: n.priority,
  			left:     right,
  			right:    n.right,
  		}
  	}
  	left, middle, right := t.split(n.right, s)
  	return &node{
  		item:     n.item,
  		priority: n.priority,
  		left:     n.left,
  		right:    left,
  	}, middle, right
  }
docs: // Splits a treap into two treaps based on a split item "s".
  // The result tuple-3 means (left, X, right), where X is either...
  // nil - meaning the item s was not in the original treap.
  // non-nil - returning the node that had item s.
  // The tuple-3's left result treap has items < s,
  // and the tuple-3's right result treap has items > s.