#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
// 用于存储所有可能的退出顺序
vector<string> result;
// 模拟栈结构
vector<int> stack;
// 标记应用是否已退出
vector<bool> visited;
// 回溯函数,生成所有可能的退出顺序
void backtrack(int n, string current) {
// 如果所有应用都已退出,将当前顺序加入结果集
if (current.size() == n) {
result.push_back(current);
return;
}
// 如果栈不为空,弹出栈顶元素(模拟退出栈顶应用)
if (!stack.empty()) {
int top = stack.back();
stack.pop_back();
backtrack(n, current + to_string(top));
// 回溯,恢复栈的状态
stack.push_back(top);
}
// 遍历所有未退出的应用
for (int i = 1; i <= n; ++i) {
if (!visited[i]) {
visited[i] = true;
stack.push_back(i);
backtrack(n, current);
// 回溯,恢复应用的状态和栈的状态
stack.pop_back();
visited[i] = false;
}
}
}
void clacExitMode(int n) {
visited.resize(n + 1, false);
backtrack(n, "");
// 按字典序排序结果
sort(result.begin(), result.end());
// 输出所有结果
for (const string& s : result) {
cout << s << " ";
}
cout << endl;
}
int main() {
int n = 3;
clacExitMode(n);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8g55So5LqO5a2Y5YKo5omA5pyJ5Y+v6IO955qE6YCA5Ye66aG65bqPCnZlY3RvcjxzdHJpbmc+IHJlc3VsdDsKLy8g5qih5ouf5qCI57uT5p6ECnZlY3RvcjxpbnQ+IHN0YWNrOwovLyDmoIforrDlupTnlKjmmK/lkKblt7LpgIDlh7oKdmVjdG9yPGJvb2w+IHZpc2l0ZWQ7CgovLyDlm57muq/lh73mlbDvvIznlJ/miJDmiYDmnInlj6/og73nmoTpgIDlh7rpobrluo8Kdm9pZCBiYWNrdHJhY2soaW50IG4sIHN0cmluZyBjdXJyZW50KSB7CiAgICAvLyDlpoLmnpzmiYDmnInlupTnlKjpg73lt7LpgIDlh7rvvIzlsIblvZPliY3pobrluo/liqDlhaXnu5Pmnpzpm4YKICAgIGlmIChjdXJyZW50LnNpemUoKSA9PSBuKSB7CiAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhjdXJyZW50KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8g5aaC5p6c5qCI5LiN5Li656m677yM5by55Ye65qCI6aG25YWD57Sg77yI5qih5ouf6YCA5Ye65qCI6aG25bqU55So77yJCiAgICBpZiAoIXN0YWNrLmVtcHR5KCkpIHsKICAgICAgICBpbnQgdG9wID0gc3RhY2suYmFjaygpOwogICAgICAgIHN0YWNrLnBvcF9iYWNrKCk7CiAgICAgICAgYmFja3RyYWNrKG4sIGN1cnJlbnQgKyB0b19zdHJpbmcodG9wKSk7CiAgICAgICAgLy8g5Zue5rqv77yM5oGi5aSN5qCI55qE54q25oCBCiAgICAgICAgc3RhY2sucHVzaF9iYWNrKHRvcCk7CiAgICB9CgogICAgLy8g6YGN5Y6G5omA5pyJ5pyq6YCA5Ye655qE5bqU55SoCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKICAgICAgICBpZiAoIXZpc2l0ZWRbaV0pIHsKICAgICAgICAgICAgdmlzaXRlZFtpXSA9IHRydWU7CiAgICAgICAgICAgIHN0YWNrLnB1c2hfYmFjayhpKTsKICAgICAgICAgICAgYmFja3RyYWNrKG4sIGN1cnJlbnQpOwogICAgICAgICAgICAvLyDlm57muq/vvIzmgaLlpI3lupTnlKjnmoTnirbmgIHlkozmoIjnmoTnirbmgIEKICAgICAgICAgICAgc3RhY2sucG9wX2JhY2soKTsKICAgICAgICAgICAgdmlzaXRlZFtpXSA9IGZhbHNlOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBjbGFjRXhpdE1vZGUoaW50IG4pIHsKICAgIHZpc2l0ZWQucmVzaXplKG4gKyAxLCBmYWxzZSk7CiAgICBiYWNrdHJhY2sobiwgIiIpOwogICAgLy8g5oyJ5a2X5YW45bqP5o6S5bqP57uT5p6cCiAgICBzb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOwogICAgLy8g6L6T5Ye65omA5pyJ57uT5p6cCiAgICBmb3IgKGNvbnN0IHN0cmluZyYgcyA6IHJlc3VsdCkgewogICAgICAgIGNvdXQgPDwgcyA8PCAiICI7CiAgICB9CiAgICBjb3V0IDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewogICAgaW50IG4gPSAzOwogICAgY2xhY0V4aXRNb2RlKG4pOwogICAgcmV0dXJuIDA7Cn0=