#include <iostream> #include <vector> #include <stack> #include <algorithm> using namespace std; int n; vector<int> in_seq; // 输入的入站序列 vector<vector<int>> results; // 所有合法的出站序列 void backtrack(int in_index, stack<int>& st, vector<int>& out_seq) { if (out_seq.size() == n) { results.push_back(out_seq); return; } // 尝试入栈 if (in_index < n) { st.push(in_seq[in_index]); backtrack(in_index + 1, st, out_seq); st.pop(); // 回溯 } // 尝试出栈 if (!st.empty()) { int top = st.top(); st.pop(); out_seq.push_back(top); backtrack(in_index, st, out_seq); out_seq.pop_back(); st.push(top); // 回溯 } } int main() { cin >> n; in_seq.resize(n); for (int i = 0; i < n; ++i) { cin >> in_seq[i]; } stack<int> st; vector<int> out_seq; backtrack(0, st, out_seq); // 排序结果 sort(results.begin(), results.end()); // 输出结果 for (const auto& seq : results) { for (int i = 0; i < seq.size(); ++i) { if (i > 0) cout << " "; cout << seq[i]; } cout << "\n"; } return 0; }