#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include "cp/debug.h"
#else
#define debug(...) 42
#endif
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<array<int, 10>> g(1);
g[0].fill(0);
auto pr = [&](array<int, 10>& a) {
int m = 0;
for (int i = 0; i < n; i++) {
m = max(m, a[i]);
}
vector<vector<int>> p(m + 1);
for (int i = 0; i < n; i++) {
p[a[i]].push_back(i + 1);
}
for (int i = 0; i < p.size(); i++) {
cout << "{";
for (int j = 0; j < p[i].size(); j++) {
if (j) {
cout << ",";
}
cout << p[i][j];
}
cout << "}";
if (i + 1 < p.size()) {
cout << ",";
}
}
cout << "\n";
};
for (int x = 2; x <= n; x++) {
vector<array<int, 10>> h;
h.reserve(g.size() * x);
for (int i = 0; i < g.size(); i++) {
int m = 0;
for (int j = 0; j < x - 1; j++) {
m = max(m, g[i][j]);
}
if (i % 2 == 0) {
array<int, 10> b = g[i];
b[x - 1] = 0;
h.push_back(b);
for (int v = m + 1; v >= 1; v--) {
b = g[i];
b[x - 1] = v;
h.push_back(b);
}
} else {
array<int, 10> b = g[i];
for (int v = 1; v <= m + 1; v++) {
b = g[i];
b[x - 1] = v;
h.push_back(b);
}
b = g[i];
b[x - 1] = 0;
h.push_back(b);
}
}
g.swap(h);
}
cout << g.size() << "\n";
for (auto& a : g) {
pr(a);
}
return 0;
}