//Initial Template for C++
#include <bits/stdc++.h>
using namespace std;
struct Node
{
int data;
struct Node *left, *right;
};
Node* newNode(int data)
{
Node *temp = new Node;
temp->data = data;
temp->left = temp->right = NULL;
return temp;
}
void printInorder(Node* node)
{
if (node == NULL)
return;
printInorder(node->left);
cout<<node->data<<" ";
printInorder(node->right);
}
void pairwiseSwap(Node **root)
{
// code here
Node **firstPtr, **secondPtr;
int count = 0;
if ((*root) == NULL)
return;
if ((*root)->left == NULL && (*root)->right == NULL)
{
count++;
if (count%2)
swap(firstPtr, secondPtr);
else
firstPtr = secondPtr;
}
pairwiseSwap(&(*root)->left);
pairwiseSwap(&(*root)->right);
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
map<int, Node*> m;
int n;
scanf("%d",&n);
struct Node *root = NULL;
struct Node *child;
while (n--)
{
Node *parent;
char lr;
int n1, n2;
scanf("%d %d %c", &n1, &n2, &lr);
if (m.find(n1) == m.end())
{
parent = newNode(n1);
m[n1] = parent;
if (root == NULL)
root = parent;
}
else
parent = m[n1];
child = newNode(n2);
if (lr == 'L')
parent->left = child;
else
parent->right = child;
m[n2] = child;
}
pairwiseSwap(&root);
printInorder(root);
cout<<" ";
}
return 0;
}
Ly9Jbml0aWFsIFRlbXBsYXRlIGZvciBDKysKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgTm9kZQp7CglpbnQgZGF0YTsKCXN0cnVjdCBOb2RlICpsZWZ0LCAqcmlnaHQ7Cn07CgpOb2RlKiBuZXdOb2RlKGludCBkYXRhKQp7CglOb2RlICp0ZW1wID0gbmV3IE5vZGU7Cgl0ZW1wLT5kYXRhID0gZGF0YTsKCXRlbXAtPmxlZnQgPSB0ZW1wLT5yaWdodCA9IE5VTEw7CglyZXR1cm4gdGVtcDsKfQoKdm9pZCBwcmludElub3JkZXIoTm9kZSogbm9kZSkKewoJaWYgKG5vZGUgPT0gTlVMTCkKCQlyZXR1cm47CglwcmludElub3JkZXIobm9kZS0+bGVmdCk7Cgljb3V0PDxub2RlLT5kYXRhPDwiICI7CglwcmludElub3JkZXIobm9kZS0+cmlnaHQpOwp9Cgp2b2lkIHBhaXJ3aXNlU3dhcChOb2RlICoqcm9vdCkKewogICAgLy8gY29kZSBoZXJlCiAgICBOb2RlICoqZmlyc3RQdHIsICoqc2Vjb25kUHRyOwogICAgaW50IGNvdW50ID0gMDsKICAgIGlmICgoKnJvb3QpID09IE5VTEwpCiAgICAgICAgcmV0dXJuOwogICAgaWYgKCgqcm9vdCktPmxlZnQgPT0gTlVMTCAmJiAoKnJvb3QpLT5yaWdodCA9PSBOVUxMKQogICAgewogICAgICAgIGNvdW50Kys7CiAgICAgICAgaWYgKGNvdW50JTIpCiAgICAgICAgICAgIHN3YXAoZmlyc3RQdHIsIHNlY29uZFB0cik7CiAgICAgICAgZWxzZQogICAgICAgIAlmaXJzdFB0ciA9IHNlY29uZFB0cjsKICAgICAgICAgICAgCiAgICB9CiAgICBwYWlyd2lzZVN3YXAoJigqcm9vdCktPmxlZnQpOwogICAgcGFpcndpc2VTd2FwKCYoKnJvb3QpLT5yaWdodCk7Cn0KCmludCBtYWluKCkKewogIGludCB0OwogIHNjYW5mKCIlZCIsICZ0KTsKICB3aGlsZSAodC0tKQogIHsKICAgICBtYXA8aW50LCBOb2RlKj4gbTsKICAgICBpbnQgbjsKICAgICBzY2FuZigiJWQiLCZuKTsKICAgICBzdHJ1Y3QgTm9kZSAqcm9vdCA9IE5VTEw7CiAgICAgc3RydWN0IE5vZGUgKmNoaWxkOwogICAgIHdoaWxlIChuLS0pCiAgICAgewogICAgICAgIE5vZGUgKnBhcmVudDsKICAgICAgICBjaGFyIGxyOwogICAgICAgIGludCBuMSwgbjI7CiAgICAgICAgc2NhbmYoIiVkICVkICVjIiwgJm4xLCAmbjIsICZscik7CiAgICAgICAgaWYgKG0uZmluZChuMSkgPT0gbS5lbmQoKSkKICAgICAgICB7CiAgICAgICAgICAgcGFyZW50ID0gbmV3Tm9kZShuMSk7CiAgICAgICAgICAgbVtuMV0gPSBwYXJlbnQ7CiAgICAgICAgICAgaWYgKHJvb3QgPT0gTlVMTCkKICAgICAgICAgICAgIHJvb3QgPSBwYXJlbnQ7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICBwYXJlbnQgPSBtW24xXTsKICAgICAgICBjaGlsZCA9IG5ld05vZGUobjIpOwogICAgICAgIGlmIChsciA9PSAnTCcpCiAgICAgICAgICBwYXJlbnQtPmxlZnQgPSBjaGlsZDsKICAgICAgICBlbHNlCiAgICAgICAgICBwYXJlbnQtPnJpZ2h0ID0gY2hpbGQ7CiAgICAgICAgbVtuMl0gID0gY2hpbGQ7CiAgICAgfQogICAgIHBhaXJ3aXNlU3dhcCgmcm9vdCk7CiAgICAgcHJpbnRJbm9yZGVyKHJvb3QpOwogICAgIGNvdXQ8PCIgIjsKICB9CiAgcmV0dXJuIDA7Cn0=