解题思路:
1. 一个队列(待入站),一个栈(模拟火车站),一个列表(存放结果)
2. 深度优先搜索,遍历所有情况(两个方向,一个出站,一个入站)
结束递归条件(全部出站),保存结果
3. 对结果进行排序(普通冒泡排序会超时,可以用快排,或者在深搜时用插入排序)
4. 一个小细节,因为n<10, 可以把火车出站序列转为一个整数(用于排序比较)

# -*- coding: utf-8 -*-
# 开发者    : QSheng
# 代码文件  : HJ77 火车进站.py
# 创建时间  : 2021/7/28 9:07


class Solution:
    def __init__(self):
        self.rnt_ = list()      # 存放结果
        self.rnt_key_ = list()  # 存放结果的key

    def _add_rnt(self, tmp, tmp_key):
        """ 添加结果 (插排) """
        idx = -1
        for i in range(len(self.rnt_)-1, -1, -1):
            if tmp_key > self.rnt_key_[i]:
                idx = i
                break
        if idx == -1:
            self.rnt_ = [tmp] + self.rnt_
            self.rnt_key_ = [tmp_key] + self.rnt_key_
        else:
            self.rnt_ = self.rnt_[:idx+1] + [tmp] + self.rnt_[idx+1:]
            self.rnt_key_ = self.rnt_key_[:idx+1] + [tmp_key] + self.rnt_key_[idx+1:]


    def _dfs(self, n, station_stack, in_queue, out_stack):
        """
        深度优先搜索
        :param n:               火车数量
        :param station_stack:   车站
        :param in_queue:        火车入站序列
        :param out_stack:       火车出站序列
        :return:
        """
        # 两个方向,一个入站,一个出站

        # 出站
        if len(station_stack) > 0:
            station_stack_cp = station_stack.copy()
            out_stack_cp = out_stack.copy()

            train_tmp = station_stack_cp.pop()  # 出站
            out_stack_cp.append(train_tmp)      # 记录出站序列
            if len(out_stack_cp) == n:          # 全部已经出站
                # self.rnt_.append(out_stack_cp)
                # self.rnt_key_.append(int("".join(out_stack_cp)))
                # 直接插入排序
                self._add_rnt(out_stack_cp, int("".join(out_stack_cp)) )
                return
            self._dfs(n, station_stack_cp, in_queue, out_stack_cp)

        # 入站
        if len(in_queue) > 0:
            station_stack_cp = station_stack.copy()
            in_queue_cp = in_queue.copy()

            train_tmp = in_queue_cp.pop(0)      # 从入站队列中取出火车
            station_stack_cp.append(train_tmp)  # 入站
            self._dfs(n, station_stack_cp, in_queue_cp, out_stack)

        return

    def _compare(self, list_a, list_b):
        """ 比较 """
        for i in range(len(list_a)):
            if int(list_a[i]) != int(list_b[i]):
                return int(list_a[i]) - int(list_b[i])
        return 0

    def _compare2(self, indx_i, indx_j):
        """ 比较 """
        return self.rnt_key_[indx_i] - self.rnt_key_[indx_j]

    def _sort_rnt(self):
        """ 排序 """
        for i in range(1, len(self.rnt_)):
            for j in range(0, len(self.rnt_) - i):
                if self._compare2(j, j+1) > 0:
                    self.rnt_[j], self.rnt_[j + 1] = self.rnt_[j + 1], self.rnt_[j]
                    self.rnt_key_[j], self.rnt_key_[j + 1] = self.rnt_key_[j + 1], self.rnt_key_[j]

    def solve(self, n, arr):

        self._dfs(n, list(), arr, list())  # 深度优先搜索
        # self._sort_rnt()                   # 排序(会超时,改为一边搜索,一边排序)
        rnt = ""
        for i in range(len(self.rnt_)-1):
            rnt += "{}\n".format(" ".join(self.rnt_[i]))
        rnt += "{}".format(" ".join(self.rnt_[-1]))

        return rnt

import sys
if __name__ == '__main__':
    is_IDE = False
    if is_IDE:
        fr = open("data/HJ77.txt", "r", encoding="utf-8")
    else:
        fr = sys.stdin

    while True:
        line_n = fr.readline().strip()
        if line_n == "":
            break
        line_list = fr.readline().strip().split(" ")
        print(Solution().solve(int(line_n), line_list))

    if is_IDE:
        fr.close()