- #include <iostream> 
- #include <vector> 
- #include <stack> 
- using namespace std; 
- struct Node { 
- 	int x; 
- 	Node *l; 
- 	Node *r; 
- 	Node(int value=0, Node* left=NULL, Node* right=NULL) : x(value), l(left), r(right) {} 
- }; 
-   
- void print_binary_tree(Node* node, int depth=0){ 
- 	if(!node)	return; 
- 	print_binary_tree(node->r, depth+1); 
- 	string str = ""; 
- 	for(int i=0; i<depth; i++) 
- 		cout<<"|\t"; 
- 	cout<<node->x<<endl; 
- 	print_binary_tree(node->l, depth+1); 
- 	return; 
- } 
- void insert(Node* &root, Node* node){ 
-     if(!root)   root = node; 
-     else insert(node->x<root->x?root->l:root->r, node); 
- } 
- Node* preorderd_to_bst(const vector<int> &v){ 
- 	Node* root = NULL; 
- 	for(int x: v) 
-         insert(root,new Node(x)); 
-     return root; 
- } 
- vector<int> bst_to_preorder(Node* root){ 
- 	stack<Node*> h; 
- 	Node* node; 
- 	h.push(root); 
- 	vector<int> v; 
- 	while(!h.empty()){ 
- 		node = h.top(); 
- 		h.pop(); 
- 		if(!node)	continue; 
- 		v.push_back(node->x); 
- 		h.push(node->r); 
- 		h.push(node->l); 
- 	} 
- 	return v; 
- } 
- void random_run(int n = 100){ 
- 	Node* root = NULL; 
- 	while(n--) 
-         insert(root,new Node(rand()%1000)); 
- 	cout<<"Original Tree"<<endl; 
- 	print_binary_tree(root); 
- 	cout<<endl; 
- 	vector<int> preorder = bst_to_preorder(root); 
- 	cout<<"Preorder Traversal"<<endl; 
- 	for(int x: preorder) 
- 		cout<<x<<' '; 
- 	cout<<endl<<endl; 
- 	root = preorderd_to_bst(preorder); 
- 	cout<<"Answer Tree"<<endl; 
- 	print_binary_tree(root); 
- 	cout<<endl; 
- } 
- int main() { 
- 	int t,n,x; 
- 	Node* root; 
- 	vector<int> v; 
- 	cin>>t; 
- 	while(t--){ 
- 		cin>>n; 
- 		v.clear(); 
- 		while(n--&&cin>>x)	v.push_back(x); 
- 		root = preorderd_to_bst(v); 
- 		print_binary_tree(root); 
- 		cout<<endl; 
- 	} 
- 	random_run(); 
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RhY2s+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBOb2RlIHsKCWludCB4OwoJTm9kZSAqbDsKCU5vZGUgKnI7CglOb2RlKGludCB2YWx1ZT0wLCBOb2RlKiBsZWZ0PU5VTEwsIE5vZGUqIHJpZ2h0PU5VTEwpIDogeCh2YWx1ZSksIGwobGVmdCksIHIocmlnaHQpIHt9Cn07Cgp2b2lkIHByaW50X2JpbmFyeV90cmVlKE5vZGUqIG5vZGUsIGludCBkZXB0aD0wKXsKCWlmKCFub2RlKQlyZXR1cm47CglwcmludF9iaW5hcnlfdHJlZShub2RlLT5yLCBkZXB0aCsxKTsKCXN0cmluZyBzdHIgPSAiIjsKCWZvcihpbnQgaT0wOyBpPGRlcHRoOyBpKyspCgkJY291dDw8InxcdCI7Cgljb3V0PDxub2RlLT54PDxlbmRsOwoJcHJpbnRfYmluYXJ5X3RyZWUobm9kZS0+bCwgZGVwdGgrMSk7CglyZXR1cm47Cn0Kdm9pZCBpbnNlcnQoTm9kZSogJnJvb3QsIE5vZGUqIG5vZGUpewogICAgaWYoIXJvb3QpICAgcm9vdCA9IG5vZGU7CiAgICBlbHNlIGluc2VydChub2RlLT54PHJvb3QtPng/cm9vdC0+bDpyb290LT5yLCBub2RlKTsKfQpOb2RlKiBwcmVvcmRlcmRfdG9fYnN0KGNvbnN0IHZlY3RvcjxpbnQ+ICZ2KXsKCU5vZGUqIHJvb3QgPSBOVUxMOwoJZm9yKGludCB4OiB2KQogICAgICAgIGluc2VydChyb290LG5ldyBOb2RlKHgpKTsKICAgIHJldHVybiByb290Owp9CnZlY3RvcjxpbnQ+IGJzdF90b19wcmVvcmRlcihOb2RlKiByb290KXsKCXN0YWNrPE5vZGUqPiBoOwoJTm9kZSogbm9kZTsKCWgucHVzaChyb290KTsKCXZlY3RvcjxpbnQ+IHY7Cgl3aGlsZSghaC5lbXB0eSgpKXsKCQlub2RlID0gaC50b3AoKTsKCQloLnBvcCgpOwoJCWlmKCFub2RlKQljb250aW51ZTsKCQl2LnB1c2hfYmFjayhub2RlLT54KTsKCQloLnB1c2gobm9kZS0+cik7CgkJaC5wdXNoKG5vZGUtPmwpOwoJfQoJcmV0dXJuIHY7Cn0Kdm9pZCByYW5kb21fcnVuKGludCBuID0gMTAwKXsKCU5vZGUqIHJvb3QgPSBOVUxMOwoJd2hpbGUobi0tKQogICAgICAgIGluc2VydChyb290LG5ldyBOb2RlKHJhbmQoKSUxMDAwKSk7Cgljb3V0PDwiT3JpZ2luYWwgVHJlZSI8PGVuZGw7CglwcmludF9iaW5hcnlfdHJlZShyb290KTsKCWNvdXQ8PGVuZGw7Cgl2ZWN0b3I8aW50PiBwcmVvcmRlciA9IGJzdF90b19wcmVvcmRlcihyb290KTsKCWNvdXQ8PCJQcmVvcmRlciBUcmF2ZXJzYWwiPDxlbmRsOwoJZm9yKGludCB4OiBwcmVvcmRlcikKCQljb3V0PDx4PDwnICc7Cgljb3V0PDxlbmRsPDxlbmRsOwoJcm9vdCA9IHByZW9yZGVyZF90b19ic3QocHJlb3JkZXIpOwoJY291dDw8IkFuc3dlciBUcmVlIjw8ZW5kbDsKCXByaW50X2JpbmFyeV90cmVlKHJvb3QpOwoJY291dDw8ZW5kbDsKfQppbnQgbWFpbigpIHsKCWludCB0LG4seDsKCU5vZGUqIHJvb3Q7Cgl2ZWN0b3I8aW50PiB2OwoJY2luPj50OwoJd2hpbGUodC0tKXsKCQljaW4+Pm47CgkJdi5jbGVhcigpOwoJCXdoaWxlKG4tLSYmY2luPj54KQl2LnB1c2hfYmFjayh4KTsKCQlyb290ID0gcHJlb3JkZXJkX3RvX2JzdCh2KTsKCQlwcmludF9iaW5hcnlfdHJlZShyb290KTsKCQljb3V0PDxlbmRsOwoJfQoJcmFuZG9tX3J1bigpOwoJcmV0dXJuIDA7Cn0=