#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int P;
int mask;
int len;
vector< vector<int> > tracks;
vector<char> S;
vector<int> sList;

bool outputSet = 1;

int popcount(int x) {
    int c = 0;
    while (x) {
        c += (x & 1);
        x >>= 1;
    }
    return c;
}

bool cmpTracks(const vector<int>& a, const vector<int>& b) {
    return popcount(a[0]) < popcount(b[0]);
}

bool dfs(int idx) {
    if (idx == (int)tracks.size()) return true;

    const vector<int>& cand = tracks[idx];

    int cnt = 0;
    for (size_t i = 0; i < cand.size(); ++i) {
        if (S[cand[i]]) ++cnt;
    }

    if (cnt > 1) return false;
    if (cnt == 1) return dfs(idx + 1);

    for (size_t i = 0; i < cand.size(); ++i) {
        int x = cand[i];
        bool ok = true;

        for (size_t j = 0; j < sList.size(); ++j) {
            int z = x & sList[j];
            if (!S[z]) {
                ok = false;
                break;
            }
        }

        if (!ok) continue;

        S[x] = 1;
        sList.push_back(x);

        if (dfs(idx + 1)) return true;

        S[x] = 0;
        sList.pop_back();
    }

    return false;
}

void printSetOfBits(int x) {
    cout << "{";
    bool first = true;
    for (int b = 0; b < P - 1; ++b) {
        if (x & (1 << b)) {
            if (!first) cout << ",";
            cout << b;
            first = false;
        }
    }
    cout << "," << P - 1;
    cout << "}";
}

int main() {
    cin >> P;
    if (P < 2) {
        cout << "Not found" << endl;
        return 0;
    }

    mask = (1 << (P - 1)) - 1;
    len = 1 << (P - 1);
    int total = 1 << P;

    vector<char> visited(total, 0);

    for (int n = 0; n < total; ++n) {
        if (visited[n]) continue;

        vector<int> cand;
        int cur = n;

        for (int k = 0; k < P; ++k) {
            visited[cur] = 1;

            if (cur & (1 << (P - 1))) {
                int x = cur & mask;

                bool found = false;
                for (size_t t = 0; t < cand.size(); ++t) {
                    if (cand[t] == x) {
                        found = true;
                        break;
                    }
                }
                if (!found) cand.push_back(x);
            }

            cur = ((cur << 1) | (cur >> (P - 1))) & (total - 1);
        }

        if (!cand.empty()) {
            tracks.push_back(cand);
        }
    }

    sort(tracks.begin(), tracks.end(), cmpTracks);

    S.assign(len, 0);
    sList.clear();

    if (dfs(0)) {
        if (outputSet) {
            for (int i = 0; i < len; ++i) {
                if (S[i]) {
                    printSetOfBits(i);
                    cout << endl;
                }
            }
        } else {
            for (int i = 0; i < len; ++i) {
                cout << (S[i] ? '1' : '0');
            }
            cout << endl;
        }
    } else {
        cout << "Not found" << endl;
    }

    return 0;
}