// Slower C++ solution:
#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<cstring>

using namespace std;



#define N 600000

#define NIL -1



int key[N];

int parent[N];

int leftc[N];

int rightc[N];



int root=NIL;

void insert(int z){

  int x,y;

  

  y=NIL;

  x=root;



  while(x!=NIL){

    y=x;

    if(key[z]<key[x]) x=leftc[x];

    else x=rightc[x];

  }  

  

  parent[z]=y;



  if(y==NIL) root=z;

    

  else if(key[z]<key[y]) leftc[y]=z;



  else rightc[y]=z;

  

  

}



bool find(int now,int data){

  if(now==NIL) return false;

  if(data==key[now]) return true;

  if(data<key[now]) return find(leftc[now],data);

  else return find(rightc[now],data);

}



void inorderprint(int now){

  if(now!=NIL){

    inorderprint(leftc[now]);

    printf(" %d",key[now]);

    inorderprint(rightc[now]);

  }

}



void preorderprint(int now){

  if(now!=NIL){

    printf(" %d",key[now]);

    preorderprint(leftc[now]);

    preorderprint(rightc[now]);

  }

}







int main(){



  int n,i,j,data;

  int z=0;

  char str[10];



  for(i=0;i<N;i++){

    parent[i]=NIL;

    key[i]=NIL;

    rightc[i]=NIL;

    leftc[i]=NIL;

  }



  scanf("%d",&n);



  for(i=0;i<n;i++){

    scanf("%s",str);

    if(strcmp(str,"insert")==0) {

      scanf("%d",&data);

      key[z]=data;

      insert(z);

      z++;

    }

    else if(strcmp(str,"find")==0){

      scanf("%d",&data);

      if(find(root,data)==true) printf("yes\n");

      else printf("no\n");

    }

    else if(strcmp(str,"print")==0){

      inorderprint(root);

      cout <<endl;

      preorderprint(root);

      cout <<endl;

    }

  }



  return 0;

}

// Faster C++ solution for the same problem (measured speedup: 10.947923683331277x):
#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<cstring>

using namespace std;

//NIL is NULL

#define NIL NULL

//Node structure

struct Node{

  int key;

  struct Node *parent;

  struct Node *leftc;

  struct Node *rightc;

};

//define Nodepointer

typedef struct Node * Nodepointer;



//root         

Nodepointer root;



//function insert

void insert(int k){

  Nodepointer x,y,z;

  y=NIL;

  x=root;

  //make memory

  z=new struct Node();



  z->key=k;

  z->leftc=NIL;

  z->rightc=NIL;



  while(x!=NIL){

    y=x;

    if(z->key < x->key) x=x->leftc;

    else x=x->rightc;

  }



  z->parent=y;



  if(y==NIL) root=z;



  else if(z->key<y->key) y->leftc=z;



  else y->rightc=z;





}



//function search

Nodepointer find(Nodepointer now,int data){

  if(now==NIL||data==now->key) return now;

  if(data<now->key) return find(now->leftc,data);

  else return find(now->rightc,data);

}



//function treeminimum

Nodepointer treeminimum(Nodepointer x){

  while(x->leftc!=NIL){

    x=x->leftc;

  }

  return x;

}

//function treesuccerssor

Nodepointer treesuccessor(Nodepointer x){

  Nodepointer y;

  if(x->rightc!=NIL) return treeminimum(x->rightc);

  y=x->parent;

  while(y!=NIL && x==x->rightc){

    x=y;

    y=y->parent;

  }

  return y;

}

//function treedelete

void treedelete(Nodepointer z){

  Nodepointer x,y;

  if(z->leftc==NIL ||z->rightc==NIL)y=z;

  else y=treesuccessor(z);



  if(y->leftc!=NIL)x=y->leftc;

  else x=y->rightc;

 

  if(x!=NIL)x->parent=y->parent;

  if(y->parent==NIL) root=x;

  else if(y==y->parent->leftc) y->parent->leftc=x;

  else y->parent->rightc=x;



  if(y!=z) z->key=y->key;

  //free memory

  delete z;

}



//print

void inorderprint(Nodepointer now){

  if(now!=NIL){

    inorderprint(now->leftc);

    printf(" %d",now->key);

    inorderprint(now->rightc);

  }

}



void preorderprint(Nodepointer now){

  if(now!=NIL){

    printf(" %d",now->key);

    preorderprint(now->leftc);

    preorderprint(now->rightc);

  }

}





int main(){



  int n,i,j,data;

  Nodepointer del;

  char str[10];

  //load n

  scanf("%d",&n);

  //load commnad and key

  for(i=0;i<n;i++){

    scanf("%s",str);

    //insert

    if(strcmp(str,"insert")==0) {

      scanf("%d",&data);

      insert(data);

    }

    //find

    else if(strcmp(str,"find")==0){

      scanf("%d",&data);

      if(find(root,data)!=NIL) printf("yes\n");

      else printf("no\n");

    }

    //delete

    else if(strcmp(str,"delete")==0){

      scanf("%d",&data);

      del=find(root,data);

      treedelete(del);

    }

    //print

    else if(strcmp(str,"print")==0){

      inorderprint(root);

      cout <<endl;

      preorderprint(root);

      cout <<endl;

    }

  }



  return 0;

}