70 lines
1.3 KiB
C++
70 lines
1.3 KiB
C++
#include <iostream>
|
|
#include <set>
|
|
#include <deque>
|
|
using namespace std;
|
|
set<deque<int>> result;
|
|
void dfs(deque<int>& path, deque<int>& stack, deque<int>& left){
|
|
if(stack.size() == 0 && left.size() == 0){
|
|
result.emplace(path);
|
|
return;
|
|
}
|
|
else if(stack.size() == 0){
|
|
int tmp = left.front();
|
|
stack.push_back(tmp);
|
|
left.pop_front();
|
|
dfs(path, stack, left);
|
|
left.push_front(tmp);
|
|
stack.pop_back();
|
|
}
|
|
else if(left.size() == 0){
|
|
int tmp = stack.back();
|
|
stack.pop_back();
|
|
path.push_back(tmp);
|
|
dfs(path, stack, left);
|
|
stack.push_back(tmp);
|
|
path.pop_back();
|
|
}
|
|
else {
|
|
{
|
|
int tmp = left.front();
|
|
left.pop_front();
|
|
stack.push_back(tmp);
|
|
dfs(path, stack, left);
|
|
stack.pop_back();
|
|
left.push_front(tmp);
|
|
}
|
|
{
|
|
int tmp = stack.back();
|
|
stack.pop_back();
|
|
path.push_back(tmp);
|
|
dfs(path, stack, left);
|
|
path.pop_back();
|
|
stack.push_back(tmp);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
int main(){
|
|
int n;
|
|
cin >> n;
|
|
deque<int> l(n), s, p;
|
|
for(int i = 0; i < n; i++){
|
|
l[i] = i + 1;
|
|
}
|
|
dfs(p, s, l);
|
|
cout << result.size() << endl;
|
|
/*
|
|
for(auto x : result){
|
|
for(auto y : x){
|
|
cout << y << " ";
|
|
}
|
|
cout << endl;
|
|
}*/
|
|
for(auto x : *result.begin()){
|
|
cout << x << " ";
|
|
}
|
|
cout << endl;
|
|
return 0;
|
|
}
|