火车进栈
#include<iostream>
using namespace std;
const int N = 24;
int st[N], path[N];
int top, n, cnt, tt;
void dfs(int u){
if(u == n + 1){
if(++cnt > 20){
return;
}
for(int i = 1; i <= tt; i++)
cout<<path[i];
for(int i = top; i >= 1; i--)
cout<<st[i];
cout<<endl;
return;
}
if(top){
path[++tt] = st[top--];
dfs(u);
st[++top] = path[tt--];
}
st[++top] = u;
dfs(u + 1);
top--;
}
int main(){
cin>>n;
dfs(1);
return 0;
}