import java.util.*;
public class Main {
static class BST {
private class Node{
int data;
Node left;
Node right;
Node(){}
Node(int data){
this.data=data;
}
}
private Node root;
BST(int a[]){
this.root=construct(a, 0, a.length-1);
}
private Node construct(int a[], int lo, int hi) {
if(lo>hi) {
return null;
}
int mid = (lo+hi)/2;
Node nn = new Node(a[mid]);
nn.left=construct(a, lo, mid-1);
nn.right = construct(a, mid+1, hi);
return nn;
}
public void preOrder(){
preOrder(this.root);
System.out.println();
}
private void preOrder(Node node){
if(node == null){
return;
}
System.out.print(node.data+" ");
preOrder(node.left);
preOrder(node.right);
}
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int j = 0;j<n;j++){
int m = sc.nextInt();
int a[] = new int[m];
for(int i=0; i<m;i++){
a[i] = sc.nextInt();
}
int k1= sc.nextInt(), k2 = sc.nextInt();
int b[] = new int[m];
b=mergeSort(a, 0, a.length-1);
BST tree = new Main.BST(b);
System.out.print("# Preorder : ");
tree.preOrder();
System.out.print("# Nodes within range are : ");
for(int i =0;i<m;i++){
if(b[i]>=k1 && b[i]<=k2 ){
System.out.print(b[i]+" ");
}
}
System.out.println();
}
}
public static int[] mergeSortedArray(int a[] ,int b[] ) {
int ml = a.length + b.length;
int [] merged = new int[ml];
int i=0,j=0,k=0;
while(i<a.length &&j<b.length) {
if(a[i]<=b[j]) {
merged[k]= a[i];
i++;
k++;
}
else {
merged[k] = b[j];
j++;
k++;
}
}
while(j<b.length) {
merged[k] = b[j];
j++;
k++;
}
while(i<a.length) {
merged[k] = a[i];
i++;
k++;
}
return merged;
}
public static int[] mergeSort(int a[], int lo, int hi) {
if(lo == hi) {
int br[] = new int[1];
br[0] = a[lo];
return br;
}
int mid= (lo+hi)/2;
int x [] = mergeSort(a, lo, mid );
int y [] =mergeSort(a, mid+1, hi);
return mergeSortedArray(x, y);
}