#include <iostream>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;

void dfs(queue<int> a, stack<int> s, vector<int> order, vector<vector<int>>& res){
    //终止条件,a和s都空
    if(a.empty() && s.empty()){
        res.push_back(order);
        return;
    }
    //栈s空,从a中弹出元素入栈s,继续dfs
    else if(s.empty()){
        int t = a.front();
        a.pop();
        s.push(t);
        dfs(a, s, order, res);
    }
    //a空,出栈,继续dfs
    else if(a.empty()){
        int t = s.top();
        order.push_back(t);
        s.pop();
        dfs(a, s, order, res);
    }
    //a和s都不空,开辟两条路径,出栈或入栈,继续dfs
    else{
        //入栈
        queue<int> aa = a;
        stack<int> ss = s;
        int t = aa.front();
        aa.pop();
        ss.push(t);
        dfs(aa, ss, order, res);
        //出栈
        t = s.top();
        order.push_back(t);
        s.pop();
        dfs(a, s, order, res);
    }
}

int main() {
    //输入数据
    int n; 
    cin >> n;
    queue<int> a;
    for(int i = 1; i <= n; i++){
        int tmp;
        cin >> tmp;
        a.push(tmp);
    }
    //使用到的栈
    stack<int> s;
    //结果序列
    vector<vector<int>> res;
    vector<int> order;//存储一种顺序的中间容器
    //深度优先搜索函数
    dfs(a, s, order, res);
    //按字典序排序
    sort(res.begin(), res.end());
    
    //输出结果
    for(const auto& v : res){
        for(const auto& i : v){
            cout << i << " ";
        }
        cout << endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")