// 多行输入
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
const inputArr = [];//存放输入的数据
rl.on('line', function (line) {
    //line是输入的每一行,为字符串格式
    inputArr.push(line.split(' ').map(item => Number(item)));//将输入流保存到inputArr中(用map将字符串数组转为数字)
}).on('close', function () {
   let res = fun(inputArr)//调用函数
   res.forEach(item => console.log(item.join(' '))) //打印结果
})

//解决函数
function fun(arr) {
    let N = arr[0][0];
    let train = arr[1].concat();    //未进站的火车
    let res = [];    //输出的结果
    let station = []    //站台栈内的火车
    let outStation = []    //发出的火车
    let backtrace = (train, station, outStation) => {
        if (outStation.length == N) {
            res.push([...outStation])
            return;
        }
        if (station.length == 0 && train.length != 0) {
            // 如果车站为空且未进站的火车不为空,则进站
            station.push(train.shift())
            backtrace(train, station, outStation)
        } else if (station.length != 0 && train.length == 0) {
            // 如果车站不为空,且没有未进站的火车,则顺序出站
            outStation.push(station.pop())
            backtrace(train, station, outStation)
        } else if (station.length != 0 && train.length != 0) {
            // 如果车站不为空,且还有未进站的火车,则可以选择1.出站,2.进站,并回溯
            let temp1 = [...outStation];
            let temp2 = [...station];
            let temp3 = [...train]
            // 出站
            outStation.push(station.pop())
            backtrace(train, station, outStation)
            // 回溯 
            outStation = temp1;
            station = temp2;
            train = temp3;
            // 进站
            station.push(train.shift())
            backtrace(train, station, outStation)
        }
    }
    backtrace(train, station, outStation)
    return res.sort((a, b) => a.join('') - b.join(''))
}