#include<stdio.h>
#include<stdlib.h>
struct node{
    int data;
    struct node* right;
    struct node*left;
};
struct node* create(int x){
    struct node* newnode = (struct node *)malloc(sizeof(struct node));
    newnode->data = x;
    newnode->left= newnode->right = NULL;
    return newnode;
}
struct node* insert(struct root* , int x){
    if(root==NULL)
        return create(x);
    if(x < root->data)
    root->left= insert(root->left,x);
    else if(x > root->data)
    root->right= insert(root->right,x);
    return root;
}
 struct node* min(struct node* root){
        while(root->left!=NULL)
        root=root->left;
    return root;
 }
struct node* delete(struct node* root, int key){
    if(root==NULL)
        return NULL;
    if(key<root->data)
    root->left= delete(root->left,key);
    else if(key>root->data)
    root->right= delete(root->right,key);
    else{
        if(root->left=NULL){
            struct node* temp= root->right;
            free(root);
            return temp;
        }
        struct node* temp =min(root->right);
        root->data = temp->data;
        root->right= delete(root->right, temp->data);
}
return root;
}
void preorder(struct node* root){
    if(root!=NULL){
        printf("%d ", root->data);
        preorder(root->left);
        preorder(root->right);
    }
}
int valid(int n){
    return(n>=0 && n<=20);
}
int main(){
    int n,x;
    if(scanf("%d %d", &n,&x)!=2  || !valid(n)){
        printf("Invalid input");
        return 0;
    }
    root= insert(root,x);
 }
    root= delete(root,x);
    preorder(root);
    printf("\n");
    return 0;
    }