#include <iostream>
#include <stack>
#include <vector>
#include <algorithm>

using namespace std;

void dfs(vector<int>& in, int index, stack<int>& st, vector<int>& out,
         vector<vector<int>>& res) {
    if (index >= in.size() && st.empty()) {
        // 已完成全部入栈和出栈工作
        res.push_back(out);
        return;
    }
    if (index < in.size()) {
        // 入栈
        st.push(in[index]);
        // 递归下一步是入栈海事出栈
        dfs(in, index + 1, st, out, res);
        // 返回状态
        st.pop();
    }
    if (!st.empty()) {
        // 出栈
        out.push_back(st.top());
        st.pop();
        dfs(in, index, st, out, res);
        st.push(out.back());
        out.pop_back();
    }
}

int main() {
    int n;
    while (cin >> n) {
        vector<int> arr(n, 0);
        for (int i = 0; i < n; ++i) {
            cin >> arr[i];
        }
        stack<int> st;
        vector<int> out;
        vector<vector<int>> res;
        dfs(arr, 0, st, out, res);
        sort(res.begin(), res.end());
        for (auto r : res) {
            for (auto item : r) {
                cout << item << " ";
            }
            cout << endl;
        }
    }

    return 0;
}