← Home
#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;
}