import java.util.*;
/**
* HJ77 火车进站 - 中等
*/
public class HJ077 {
public static List<String> resList = new ArrayList<>();
public static Stack<Integer> stack = new Stack<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
helper(nums, 0, 0, "");
Collections.sort(resList);
for (String s : resList) {
System.out.println(s);
}
}
}
/**
* @param nums 所有的火车
* @param pushedNum 火车已经在栈里的数量
* @param popNum 火车已全部出来的数量
* @param res 单次结果
*/
private static void helper(int[] nums, int pushedNum, int popNum, String res) {
// 3. 火车全部都出来后,记录本次的结果,继续
if (popNum == nums.length) {
// 火车已全部出来,
resList.add(res);
}
// 1. 得让所有火车都进栈,进栈后恢复原样
if (pushedNum < nums.length) {
// 进去一个,已经在栈里的数量多了一个,出来的没变,出来的结果没变
stack.push(nums[pushedNum]);
helper(nums, pushedNum + 1, popNum, res);
stack.pop(); //恢复现场
}
// 2. 得让所有进去的火车全部出来,出来后也恢复原样
if (!stack.empty()) {
// 出来一个,已经在栈里的数量不动(没有新进去),出来的多了一个,结果加上出来的
int pop = stack.pop();
helper(nums, pushedNum, popNum + 1, res + pop + " ");
stack.push(pop); //恢复现场
}
}
}