#include <iostream>
#include <set>
#include <stack>
using namespace std;
int inSeq[10], vis[10];
int n;
//判断序列是否合法
bool judge(int *a, int len) {
//使用双指针
int p1 = 0, p2;
stack<int> st;
//stack是不支持st.find的,因此使用set记录
set<int> s;
for (p2 = 0; p2 < len; p2++) {
int val = a[p2];
if (!st.empty()) {
if (st.top() == val) {
st.pop();
s.erase(val);
continue;
} else if (s.find(val) != s.end()) {
return false;
}
}
//入栈
while (inSeq[p1] != val) {
st.push(inSeq[p1]);
s.insert(inSeq[p1]);
p1++;
}
p1++;
}
return true;
}
//求1 ~ n的全排列
void dfs(int *a, int deep) {
if (deep == n + 1) {
if (judge(a, n)) {
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
}
}
//遍历的顺序就可以解决字典序的要求
for (int i = 1; i <= n; i++) {
if (!vis[i]) {
a[deep - 1] = i;
vis[i] = 1;
dfs(a, deep + 1);
vis[i] = 0;
a[deep - 1] = 0;
}
}
}
int main() {
int len;
cin >> len;
n = len;
for (int i = 0; i < len; i++) {
cin >> inSeq[i];
}
int a[10];
dfs(a, 1);
}