很简单但是想了很久。其实就是问怎么出栈。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define pb push_back
#define fi first
#define se second
#define mem(a,x) memset(a,x,sizeof(a));
#define db double
#define fir(i,a,n) for(int i=a;i<=n;i++)
//======================
const int N=1e5+10;
stack<int>s;
vector<int>p;
int n,ans;
int flag=0;
void dfs(int u)
{
if(flag) return;
if(p.size()==n)
{
for(auto x:p) cout<<x;
cout<<endl;
ans++;
if(ans==20) flag=1;
return;
}
//出
if(s.size())
{
p.pb(s.top());
s.pop();
dfs(u);
s.push(p.back());
p.pop_back();
}
if(u<=n)
{
s.push(u);
dfs(u+1);
s.pop();
}
}
int main()
{
cin>>n;
dfs(1);
return 0;
}