#include #include #include using namespace std; set> result; void dfs(deque& path, deque& stack, deque& 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 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; }