import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
static List<String> ll = new ArrayList<>();
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
ll.clear();
int n = in.nextInt();
int[] train = new int[n];
for (int i = 0; i < n; i++) {
train[i] = in.nextInt();
}
Stack<Integer> stack = new Stack<>();
function(train, 0, 0, stack, "");
// 对结果集排序
Collections.sort(ll);
for (String str : ll) {
System.out.println(str);
}
}
}
// i 为入栈次数, j 为出栈次数 Str 记录出栈顺序
public static void function(int[] train, int i, int j, Stack<Integer> stack, String str) {
if (j == train.length) {
ll.add(str);
}
if (!stack.isEmpty()) {
int temp = stack.pop();
function(train, i, j + 1, stack, str + temp + " "); // 出栈拼接字符串
stack.push(temp);// 恢复现场
}
if (i < train.length) {
stack.push(train[i]);
function(train, i + 1, j, stack, str);
stack.pop();// 恢复现场
}
}
}