#include <iostream>
#include <cstdlib>
using namespace std;
struct deramid_node{
int key;
int priority;
deramid_node *left;
deramid_node *right;
deramid_node *parent;
};
typedef deramid_node deramid;
void left_rotate(deramid *root, deramid *x){
deramid *y = x->right;
x->right = y->left;
if(y->left != NULL) y->left->parent = x;
y->parent = x->parent;
if(x->parent == NULL) root = y;
else{
if(x == x->parent->left) x->parent->left = y;
else x->parent->right = y;
}
y->left = x;
x->parent = y;
}
void right_rotate(deramid *root, deramid *x){
deramid *y = x->left;
x->left = y->right;
if(y->right != NULL) y->right->parent = x;
y->parent = x->parent;
if(x->parent == NULL) root = y;
else{
if(x == x->parent->right) x->parent->right = y;
else x->parent->left = y;
}
y->right = x;
x->parent = y;
}
void deramid_insert(deramid *root, deramid *z){
deramid *x = root; //Отмечает проходимый путь
deramid *y = NULL; //Ссылается на родительский по отношению к x узел
z->priority = std::rand() % 701;
while(x != NULL){
y = x;
if(z->key < x->key) x = x->left;
else x = x->right;
}
y = z->parent;
if(y == NULL) root = z;
else{
if(z->key < y->key) y->left = z;
else y->right = z;
}
}
int main() {
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBkZXJhbWlkX25vZGV7CglpbnQga2V5OwoJaW50IHByaW9yaXR5OwoJZGVyYW1pZF9ub2RlICpsZWZ0OwoJZGVyYW1pZF9ub2RlICpyaWdodDsKCWRlcmFtaWRfbm9kZSAqcGFyZW50Owp9OwoKdHlwZWRlZiBkZXJhbWlkX25vZGUgZGVyYW1pZDsKCnZvaWQgbGVmdF9yb3RhdGUoZGVyYW1pZCAqcm9vdCwgZGVyYW1pZCAqeCl7CglkZXJhbWlkICp5ID0geC0+cmlnaHQ7Cgl4LT5yaWdodCA9IHktPmxlZnQ7CglpZih5LT5sZWZ0ICE9IE5VTEwpIHktPmxlZnQtPnBhcmVudCA9IHg7Cgl5LT5wYXJlbnQgPSB4LT5wYXJlbnQ7CglpZih4LT5wYXJlbnQgPT0gTlVMTCkgcm9vdCA9IHk7CgllbHNlewoJCWlmKHggPT0geC0+cGFyZW50LT5sZWZ0KQl4LT5wYXJlbnQtPmxlZnQgPSB5OwoJCWVsc2UJCQkJCQl4LT5wYXJlbnQtPnJpZ2h0ID0geTsKCX0KCXktPmxlZnQgPSB4OwoJeC0+cGFyZW50ID0geTsKfQoKdm9pZCByaWdodF9yb3RhdGUoZGVyYW1pZCAqcm9vdCwgZGVyYW1pZCAqeCl7CglkZXJhbWlkICp5ID0geC0+bGVmdDsKCXgtPmxlZnQgPSB5LT5yaWdodDsKCWlmKHktPnJpZ2h0ICE9IE5VTEwpIHktPnJpZ2h0LT5wYXJlbnQgPSB4OwoJeS0+cGFyZW50ID0geC0+cGFyZW50OwoJaWYoeC0+cGFyZW50ID09IE5VTEwpIHJvb3QgPSB5OwoJZWxzZXsKCQlpZih4ID09IHgtPnBhcmVudC0+cmlnaHQpCXgtPnBhcmVudC0+cmlnaHQgPSB5OwoJCWVsc2UJCQkJCQl4LT5wYXJlbnQtPmxlZnQgPSB5OwoJfQoJeS0+cmlnaHQgPSB4OwoJeC0+cGFyZW50ID0geTsKfQoKdm9pZCBkZXJhbWlkX2luc2VydChkZXJhbWlkICpyb290LCBkZXJhbWlkICp6KXsKCWRlcmFtaWQgKnggPSByb290OwkvL9Ce0YLQvNC10YfQsNC10YIg0L/RgNC+0YXQvtC00LjQvNGL0Lkg0L/Rg9GC0YwKCWRlcmFtaWQgKnkgPSBOVUxMOwkvL9Ch0YHRi9C70LDQtdGC0YHRjyDQvdCwINGA0L7QtNC40YLQtdC70YzRgdC60LjQuSDQv9C+INC+0YLQvdC+0YjQtdC90LjRjiDQuiB4INGD0LfQtdC7CgkKCXotPnByaW9yaXR5ID0gc3RkOjpyYW5kKCkgJSA3MDE7Cgl3aGlsZSh4ICE9IE5VTEwpewoJCXkgPSB4OwoJCWlmKHotPmtleSA8IHgtPmtleSkgeCA9IHgtPmxlZnQ7CgkJZWxzZQkJCQl4ID0geC0+cmlnaHQ7Cgl9Cgl5ID0gei0+cGFyZW50OwoJaWYoeSA9PSBOVUxMKSByb290ID0gejsKCWVsc2V7CgkJaWYoei0+a2V5IDwgeS0+a2V5KSB5LT5sZWZ0ID0gejsKCQllbHNlCQkJCXktPnJpZ2h0ID0gejsJCgl9Cn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcmV0dXJuIDA7Cn0=