import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static List<List<Integer>> result = new ArrayList<>();
    public static List<Integer> list = new ArrayList<>();
    public static HashSet<Integer> set = new HashSet<>();
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            int []trains = new int[n];
            for (int i = 0; i < n; i++) {
                trains[i] = in.nextInt();
            }
            dfs(0, trains);
            List<String> ans = new ArrayList<>();

            for (int i = 0; i < result.size(); i++) {
                List<Integer> list1 = result.get(i);
                //筛选出合法的出栈排列
                if (validateStackSequences(trains, list1)) {
                    StringBuilder st = new StringBuilder();
                    for (int j = 0; j < list1.size(); j++) {
                        
                        st.append(list1.get(j));
                    }
                    //转变成字符串方便字典序排序
                    ans.add(st.toString());
                }
            }
            Collections.sort(ans);
           
            for (int i = 0; i < ans.size(); i++) {
                String s = ans.get(i);
                for (int j = 0; j < s.length(); j++) {
                    int num = s.charAt(j) - '0';
                    if (j == s.length() - 1) {
                        System.out.println(num);

                    } else {
                        System.out.print(num);
                        System.out.print(" ");
                    }

                }


            }
        }
    }
    //得出N个元素的全排列(*******)
    public static void dfs(int i, int[] nums) {
        if (i == nums.length)
            return;

        for (int j = 0; j < nums.length; j++) {
            if (!set.contains(nums[j])) {
                list.add(nums[j]);
                set.add(nums[j]);
                dfs(i + 1, nums);
                if (list.size() == nums.length) {
                    result.add(new ArrayList<>(list));

                }
                list.remove(i);
                set.remove(nums[j]);
            }

        }

    }
    //判断一个排列是否是合法的出栈顺序(*****)
    public static boolean validateStackSequences(int[] pushed,
            List<Integer> popped) {
        LinkedList<Integer> stack = new LinkedList<>();
        int top = 0;

        for (int i = 0; i < pushed.length; i++) {
            stack.push(pushed[i]);
            while (!stack.isEmpty() && top < popped.size() &&
                    popped.get(top) == stack.peek()) {
                stack.pop();
                top++;
            }

        }


        return stack.isEmpty();

    }
}