public KeyNodeStringPair dealWithPromote(String newKey, Node rightChild,
			InternalNodeString node) {

		// if new key is greater than the key in the last element of list
		// insert child into the node
		if (newKey.compareTo(node.getKeys().get(node.size() - 1)) > 0) {
			node.getKeys().add(newKey);
			node.getChildren().add(rightChild);
		} else {
			int size = node.size();
			for (int i = 0; i < size; i++) {
				if (newKey.compareTo(node.getKeys().get(i)) < 0) {
					node.getKeys().add(i, newKey);
					node.getChildren().add(i + 1, rightChild);
					break;
				}
			}
		}

		// determine the return value
		if (node.size() <= MAX_NODE_KEYS) {
			return null;
		}

		InternalNodeString sibling = new InternalNodeString();
		int mid = (node.size() + 1) / 2 - 1;
		// move node.keys from mid - node.size to sibling.node starting from 0
		int size = node.size();
		for (int i = mid + 1; i < size; i++) {
			sibling.getKeys().add(node.getKeys().get(mid + 1));
			node.getKeys().remove(mid + 1);
		}
		// move node.child from mid - node.size to sibling.child starting from
		// 0
		for (int i = mid + 1; i < size + 1; i++) {
			sibling.getChildren().add(node.getChildren().get(mid + 1));
			node.getChildren().remove(mid + 1);
		}
		String promoteKey = node.getKeys().get(mid);
		// remove key which is promoted from node
		node.getKeys().remove(mid);
		return new KeyNodeStringPair(promoteKey, sibling);
	}