/**
15
15 7 20 -1 -1 3 12 -1 -1 -1 -1 14 8 -1 -1
2 4
*/
import java.util.*;
public class Main2 {
static int[] value ;
static class TreeNode{
int val;
TreeNode left,right;
public TreeNode(int t) {
this.val =t;
}
}
static ArrayList<ArrayList<Integer>> rs;
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
value = new int[n];
for(int i = 0;i < n;i++) {
value[i] = cin.nextInt();
}
int s = cin.nextInt();
int e = cin.nextInt();
TreeNode head = getTree();
getRs(head,s,e);
for(ArrayList list : rs) {
for(int i = 0;i < list.size();i++) {
if(i == list.size() -1) {
System.out.println(list.get(i));
} else {
System.out.print(list.get(i) +" ");
}
}
}
}
private static void getRs(TreeNode root, int s, int e) {
rs = new ArrayList();
LinkedList<TreeNode> queue= new LinkedList();
if(root == null) {
return;
}
queue.offer(root);
int ceng = 1;
while(queue.size() > 0) {
int size=queue.size();
ArrayList<Integer> list=new ArrayList<>();
for (int i = 0; i < size; i++) {
TreeNode top = queue.poll();
if (top == null || top.val == -1) {
continue;
}
list.add(top.val);
queue.add(top.left);
queue.add(top.right);
}
if(ceng >= s && ceng <= e) {
rs.add(new ArrayList<>(list));
}
ceng++;
}
}
private static TreeNode getTree(){
TreeNode p = new TreeNode(value[0]);
TreeNode q = p;
Queue<TreeNode > queue = new LinkedList();
int i = 0;
while (p != null) {
if(2*i+1<value.length){
p.left = new TreeNode(value[2 * i + 1]);
queue.add(p.left);
}
if (2*i+2<value.length){
p.right = new TreeNode(value[2 * i + 2]);
queue.add(p.right);
}
p = queue.poll();
i++ ;
}
return q;
}
}