#include <iostream>
#include <memory>
#include <vector>
using namespace std;
struct Node {
int data;
unique_ptr<Node> left;
unique_ptr<Node> right;
Node(int x) : data(x), left(nullptr), right(nullptr) {}
};
void insert(unique_ptr<Node>& root, int val) {
if (!root) {
root = make_unique<Node>(val);
return;
}
if (root->data == val) {
return; // Ignore duplicates
} else if (root->data > val) {
insert(root->left, val);
} else {
insert(root->right, val);
}
}
unique_ptr<Node> buildBST(vector<int>& a) {
unique_ptr<Node> root = nullptr; // Initialize root to nullptr
for (int i = 0; i < a.size(); i++) {
insert(root, a[i]);
}
return root;
}
void inorder(const unique_ptr<Node>& root) {
if (!root) return; // Base case
inorder(root->left);
cout << root->data << " ";
inorder(root->right);
}
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
auto root = buildBST(a); // Store the returned root
inorder(root); // Pass the root to inorder
cout << endl; // Add newline for clarity between test cases
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IE5vZGUgewogICAgaW50IGRhdGE7CiAgICB1bmlxdWVfcHRyPE5vZGU+IGxlZnQ7CiAgICB1bmlxdWVfcHRyPE5vZGU+IHJpZ2h0OwogICAgTm9kZShpbnQgeCkgOiBkYXRhKHgpLCBsZWZ0KG51bGxwdHIpLCByaWdodChudWxscHRyKSB7fQp9OwoKdm9pZCBpbnNlcnQodW5pcXVlX3B0cjxOb2RlPiYgcm9vdCwgaW50IHZhbCkgewogICAgaWYgKCFyb290KSB7CiAgICAgICAgcm9vdCA9IG1ha2VfdW5pcXVlPE5vZGU+KHZhbCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHJvb3QtPmRhdGEgPT0gdmFsKSB7CiAgICAgICAgcmV0dXJuOyAvLyBJZ25vcmUgZHVwbGljYXRlcwogICAgfSBlbHNlIGlmIChyb290LT5kYXRhID4gdmFsKSB7CiAgICAgICAgaW5zZXJ0KHJvb3QtPmxlZnQsIHZhbCk7CiAgICB9IGVsc2UgewogICAgICAgIGluc2VydChyb290LT5yaWdodCwgdmFsKTsKICAgIH0KfQoKdW5pcXVlX3B0cjxOb2RlPiBidWlsZEJTVCh2ZWN0b3I8aW50PiYgYSkgewogICAgdW5pcXVlX3B0cjxOb2RlPiByb290ID0gbnVsbHB0cjsgLy8gSW5pdGlhbGl6ZSByb290IHRvIG51bGxwdHIKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYS5zaXplKCk7IGkrKykgewogICAgICAgIGluc2VydChyb290LCBhW2ldKTsKICAgIH0KICAgIHJldHVybiByb290Owp9Cgp2b2lkIGlub3JkZXIoY29uc3QgdW5pcXVlX3B0cjxOb2RlPiYgcm9vdCkgewogICAgaWYgKCFyb290KSByZXR1cm47IC8vIEJhc2UgY2FzZQogICAgaW5vcmRlcihyb290LT5sZWZ0KTsKICAgIGNvdXQgPDwgcm9vdC0+ZGF0YSA8PCAiICI7CiAgICBpbm9yZGVyKHJvb3QtPnJpZ2h0KTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgdDsKICAgIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIGludCBuOwogICAgICAgIGNpbiA+PiBuOwogICAgICAgIHZlY3RvcjxpbnQ+IGEobik7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgfQogICAgICAgIGF1dG8gcm9vdCA9IGJ1aWxkQlNUKGEpOyAvLyBTdG9yZSB0aGUgcmV0dXJuZWQgcm9vdAogICAgICAgIGlub3JkZXIocm9vdCk7IC8vIFBhc3MgdGhlIHJvb3QgdG8gaW5vcmRlcgogICAgICAgIGNvdXQgPDwgZW5kbDsgLy8gQWRkIG5ld2xpbmUgZm9yIGNsYXJpdHkgYmV0d2VlbiB0ZXN0IGNhc2VzCiAgICB9CiAgICByZXR1cm4gMDsKfQ==