#include <iostream>
using namespace std;
typedef double DATA;
class bstree{
?struct bnode{
??DATA d;
??bnode* left;
??bnode* right;
??bnode( const DATA& cd )
??:d(cd), left(NULL), right(NULL)
??{}
?};
?bnode* root;
?int len;
?bstree(const bstree& cb){}
?bstree& operator=(const bstree& cb){return *this;}
?void clear( bnode* & ptree ){
??if( ptree==NULL )
???return;
??clear( ptree->left );
??clear( ptree->right );
??delete ptree;
??ptree = NULL;
??len--;
?}
?void insert( bnode* & ptree, bnode* np ){
??if( ptree==NULL )
???ptree = np;
??else if( np->d < ptree->d )
???insert( ptree->left, np );
??else
???insert( ptree->right, np );
?}
?void show( bnode* ptree ){
??if( ptree==NULL )
???return;
??show( ptree->left );
??cout << ptree->d << ' ';
??show( ptree->right );
?}
public:
?bstree():len(0){ root=NULL; }
?~bstree(){ clear(); }
?void clear(){clear(root);}
?void insert( const DATA& cd ){
??insert( root, new bnode(cd) );
??len++;
?}
?void show(){
??show( root );
??cout << endl;
?}
?int size(){ return len; }
?bool empty(){ return root==NULL; }
};
int main()
{
?bstree bs;
?DATA d;
?while( cin.peek()!='\n' ){
??cin >> d;
??bs.insert( d );
?}
?cout << bs.size() << " data:" << endl;
?bs.show();
?return 0;
}