#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void checkmin(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline void checkmax(T &a, T b) {
  if (a < b) a = b;
}
const int oo = 1 << 30;
const double eps = 1e-7;
const int N = 120000;
const int M = 1;
const long long P = 10000000097ll;
int ans;
int n;
int box[22][22];
int bn[22];
int to[22];
int dr[22];
void pt_out() {
  int i, j, k;
  for (i = 1; bn[i] > 0; i++) {
    if (i > 1) putchar(',');
    printf("{%d", box[i][0]);
    for (j = 1; j < bn[i]; j++) printf(",%d", box[i][j]);
    putchar('}');
  }
  puts("");
}
void in(int b, int id) { box[b][bn[b]++] = id; }
void out(int b) { bn[b]--; }
void dfs(int mx, int id) {
  int i, j, k, tp;
  if (id > n) {
    pt_out();
    return;
  }
  if (0 == dr[id]) {
    in(mx, id);
    dfs(mx + 1, id + 1);
    out(mx);
    tp ^= 1;
    for (i = mx - 1; i > 0; i--) {
      in(i, id);
      dfs(mx, id + 1);
      out(i);
    }
  } else {
    for (i = 1; i < mx; i++) {
      in(i, id);
      dfs(mx, id + 1);
      out(i);
    }
    in(mx, id);
    dfs(mx + 1, id + 1);
    out(mx);
  }
  dr[id] ^= 1;
}
void pt(int n) {
  int a[] = {0, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975};
  printf("%d\n", a[n]);
}
int main() {
  int T, _ = 0;
  while (1 == scanf("%d", &n)) {
    (memset((dr), 0, sizeof(dr)));
    int i;
    for ((i) = 0; i < (12); (i)++) dr[i] = 1;
    (memset((bn), 0, sizeof(bn)));
    pt(n);
    ans = 0;
    dfs(1, 1);
  }
  return 0;
}
