>>887
struct node { int val; struct node* left; struct node* right; };
struct node* create_node(int num) {
  struct node* node = malloc(sizeof(struct node));
  node->left = node->right = NULL; node->val = num;
  return node;
}
void disp(struct node* p) {
  if(p != NULL){ printf("%d ", p->val); if(p->left != NULL){ disp(p->left); } if(p->right != NULL){ disp(p->right); } }
}
void add_node(struct node** root, struct node** add_node) {
  struct node* search_node = *root;
  if((*add_node)->val < (*root)->val){
    *root = *add_node; (*root)->left = search_node;
  }
  else{
    while((search_node->right != NULL) && (search_node->right->val < (*add_node)->val)){ search_node = search_node->right; }
    while((search_node->left != NULL) && (search_node->left->val < (*add_node)->val)){ search_node = search_node->left; }
    (*add_node)->left = search_node->left; (*add_node)->right = search_node->right; search_node->left = *add_node;
  }
}
int main(void) {
  struct node* root = NULL; struct node* node; int num;
  printf("input data:"); scanf("%d", &num);
  while(0 < num){
    node = create_node(num);
    if(root == NULL){ root = node; }
    else{ add_node(&root, &node); }
    printf("input data:"); scanf("%d", &num);
  } printf("result:"); disp(root); puts("");
  return 0;
}