#include <bits/stdc++.h>
using namespace std;
#define N 122
#define mod 1000000007
#define vvi vector<vector<int> >
#define vi vector<int>
#define pb push_back
int n;
int p[N];
bool vis[12];
void output(vi &s) {
memset(vis, 0, sizeof vis);
bool fst = 1;
while(1) {
int u = -1;
for(int i = 0; i < s.size(); ++i) {
if(!vis[s[i]]) {
u = s[i];
vis[s[i]] = 1;
break;
}
}
if(u == -1) break;
vi t;
for(int i = 0; i < s.size(); ++i) {
if(s[i] == u) t.pb(i + 1);
}
if(fst) fst = 0;
else putchar(',');
printf("{");
for(int i = 0; i < t.size(); ++i) {
printf("%d%c", t[i], i == t.size() - 1? '}': ',');
}
}
puts("");
}
int main() {
scanf("%d", &n);
vvi x;
vi t;
t.pb(0);
x.pb(t);
for(int i = 2; i <= n; ++i) {
vvi y;
for(int j = 0; j < x.size(); ++j) {
int mx = 0;
for(int k = 0; k < x[j].size(); ++k) {
mx = max(mx, x[j][k]);
}
mx++;
if(j % 2 == 0) {
vi t = x[j];
t.pb(0);
y.pb(t);
for(int k = mx; k >= 1; --k) {
t = x[j];
t.pb(k);
y.pb(t);
}
}
else {
vi t = x[j];
for(int k = 1; k <= mx; ++k) {
t = x[j];
t.pb(k);
y.pb(t);
}
t = x[j]; t.pb(0);
y.pb(t);
}
}
x = y;
}
printf("%d\n", (int)x.size());
for(int i = 0; i < x.size(); ++i) {
output(x[i]);
}
return 0;
}