// Original C++ solution (slower):
#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;

}

// Optimized solution to the same problem (faster):
#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<cstring>

using namespace std;

#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);

}

//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;



  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");

    }

    //print

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

      inorderprint(root);

      cout <<endl;

      preorderprint(root);

      cout <<endl;

    }

  }



  return 0;

}

// Fastest known solution for this problem: