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();// 恢复现场
        }
    }
}