#include<stdio.h>
#include<stdlib.h>

typedef struct node{
    int data;
    struct node *right, *left;
}Node;

Node *minimum(Node *root){
    if(root == NULL){
        return root;
    }
    if(root->left != NULL){
        return minimum(root->left);
        return root;
    }
}

Node* deletion(Node *root, int num){
    if(root==NULL){
        return root;
    }
    if(num<root->data){
        root->left = deletion(root->left,num);
    }
    else if(num>root->data){
        root->right = deletion(root->right,num);
    }
    else{
        if(root->left !=NULL && root->right==NULL){
            return NULL;
        }
        else if(root->left !=NULL && root->right ==NULL){
            return root->left;
        }
        else if(root->left ==NULL && root->right !=NULL){
            return root->right;
        }
        else{
            Node *temp = minimum(root->right);
            root->data = temp->data;
            root->right = deletion(root->right);
        }
    }
    return root;
}

Node* deletion(Node *root)
int main(){
    int n, value, num;
    scanf("%d",&n);
    if(n<0){
        printf("Invalid input");
    }
    for(int i=0; i<n; i++){
        scanf("%d",&value);
        root = insert(root, value);
    }
    scanf("%d",&num);
    if(search(root, num)==NULL){
        printf("-1");
        return 0;
    }
    root=deletion(root,num){
        inorder(root);
        return 0;
    }
}