#include<stdio.h>
#include<stdlib.h>
struct Node{
    int key;
    struct Node*left;
    struct Node*right;
    int Height;
};
int max(int a,int b){
    return(a>b)?a:b;
}
    int getHeight(struct Node*n)
    {
        if(n==NULL)
        return 0;
        return n->Height;
        struct Node*createNode(int key){
            struct Node*node=(struct Node*)malloc(sizeof(struct Node));
            node->key=key;
            node->left=NULL;
            node->right=NULL;
            node->Height=1;
            return node;
        }
    }
            int getBalance(struct Node*n){
                if(n==NULL)
                return 0;
                return getHeight(n->left)-getHeight(n->right);
            }
            struct Node*rightRotate(struct Node*y){
                struct Node*x=y->left;
                struct Node*t2=x->right;
                x->right=y;
                y->left=t2;
                y->Height=max(getHeight(y->left),getHeight(y->right))+1;
                x->Height=max(getHeight(x->left),getHeight(x->right))+1;
                return x;
            }
              struct Node*leftRotate(struct Node*x){
                struct Node*y=x->left;
                struct Node*t2=y->right;
                x->right=t2;
                y->left=x;
                x->Height=max(getHeight(x->left),getHeight(x->right))+1;
                x->Height=max(getHeight(y->left),getHeight(y->right))+1;
                return y;
        }
     
    struct Node*insert(struct Node*node,int key)
    {
        if(node==NULL)
        return createNode(key);
        if(key<node->key)
        node->left=insert(node->left,key);
        else if(key>node->key)
        node->right=insert(node->right,key);
        else
        return node;
        node->Height=1+max(getHeight(node->left),getHeight(node->right));
        int balance=getBalance(node);
        if(balance>1&&key<node->left->key)
        return rightRotate(node);
         if(balance<-1&&key<node->right->key)
        return leftRotate(node);
         if(balance>1&&key<node->left->key)
         node->left=leftRotate(node->left);
        return rightRotate(node);
        if(balance<-1&&key<node->right->key)
        node->right=rightRotate(node->right);
        return leftRotate(node);
     return node;
}
struct Node*minvalueNode(struct Node*node)
{
    struct Node*current=node;
    while(current->left!=NULL)
    current=current->left;
    return current;
}
struct Node*deleteNode(struct Node*root,int key)
{
    if(root==NULL)
    return root;
    if(key<root->key)
    root->left=deleteNode(root->left,key);
    else if(key>root->key)
    root->right=deleteNode(root->right,key);
    else
    {
        if((root->left==NULL)||(root->right==NULL))
        {
            struct Node*temp=root->left?root->left:root->right;
            if(temp==NULL)
            {
                temp=root;
                root=NULL;
            }
            else
            *root=*temp;
            free(temp);
        }
        else{
            struct Node*temp=minvalueNode(root->right);
            root->key=temp->key;
            root->right=deleteNode(root->right,temp->key);
        }
    }
    if(root==NULL)
    return root;
    root->Height=1+max(getHeight(root->left),getHeight(root->right));
     int balance=getBalance(root);
        if(balance>1&&key<root->left->key)
        return rightRotate(root);
         if(balance<-1&&key<root->right->key)
        return leftRotate(root);
         if(balance>1&&key<root->left->key)
         root->left=leftRotate(root->left);
        return rightRotate(root);
        if(balance<-1&&key<root->right->key)
        root->right=rightRotate(root->right);
        return leftRotate(root);
     return root;
        }
        void preOrder(struct Node*root)
        {
            if(root!=NULL)
            {
                printf("%d",root->key);
                preOrder(root->left);
                preOrder(root->right);
            }
        }
       
            int main()
            {
                int n,x;
                if(scanf("%d%d",&n,&x)!=2||n<0)
                {
                    printf("Invalid input");
                    return 0;
                }
                if(n>20)
                {
                    printf("Invalid input");
                    return 0;
                }
                struct Node*root=NULL;
                for(int i=0;i<n;i++)
                {
                    int id;
                    if(scanf("%d",&id)!=1||id<0||id>1000)
                    {
                        printf("Invalid input");
                        return 0;
                    }
                    root=insert(root,id);
                }
                root=deleteNode(root,x);
                preOrder(root);
                return 0;
            }