import java.util.*;
public class Main {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
int t = scan.nextInt();
for(int i=0;i<t;i++){
int n = scan.nextInt();
int arr1[] = new int[n];
for(int j = 0;j<n;j++){
arr1[j] = scan.nextInt();
}
int m = scan.nextInt();
int arr2[] = new int[m];
for(int j = 0;j<m;j++){
arr2[j] = scan.nextInt();
}
BST tree = new BST(arr1,arr2);
tree.display();
}
}
}
class BST{
private class Node{
int data;
Node left;
Node right;
}
private Node root;
public BST(int[] arr, int[] arr2){
// Arrays.sort(arr);
this.root= construct(arr,0,arr.length-1);
for(int i=0;i<arr2.length;i++){
remove(this.root,null,false,arr2[i]);
}
}
private Node construct(int[] arr, int lo,int hi){
if(lo>hi){
return null;
}
int mid = (lo+hi)/2;
Node node = new Node();
node.data = arr[mid];
node.left = construct(arr,lo,mid-1);
node.right = construct(arr,mid+1,hi);
return node;
}
private void remove(Node node, Node parent, boolean ilc,int item){
if(item<node.data){
remove(node.left,node,true,item);
}
else if(item>node.data){
remove(node.right,node,false,item);
}
else{
if(node.right==null && node.left==null){
if(ilc){
parent.left = null;
}else{
parent.right = null;
}
}
else if(node.right!=null&& node.left ==null){
if(ilc){
parent.left = node.right;
}else{
parent.right = node.right;
}
}
else if(node.left!=null&&node.right==null){
if(ilc){
parent.left = node.left;
}
else{
parent.right = node.left;
}
}
else{
int max = max(node.left);
node.data = max;
remove(node.left,node,true,max);
}
}
}
private int max(Node node){
if(node.right == null){
return node.data;
}
return max(node.right);
}
public void display(){
display(this.root);
}
//preorder
public void display(Node node){
if(node==null){
return;
}
System.out.print(node.data+" ");
display(node.left);
display(node.right);
}
}
please check the code