﻿#include <iostream>
#include <fstream>
using namespace std;

// Adott n (>=3) esetén ki kell írni egy fájlba az {1,2,3, ... , n} halmaz azon
// permutációit, melyekben a 3-as szám nem szerepel páros elem mellett.

// 1. megoldás: ellenőrzünk már menet közben: 3 előtt ne legyen páros és
// páros előtt ne legyen 3.

ofstream fout("kimenet.txt");

int f(int szint, int n, int megoldas[])
{
    if (szint > n) {
        for (int i = 1; i <= n; i++)
            fout << megoldas[i] << " ";
        fout << endl;
    }
    else {
        for (int i = 1; i <= n; i++) {
            bool volt_mar = false;
            for (int j = 1; j < szint; j++)
                if (megoldas[j] == i)
                    volt_mar = true;

            if (!volt_mar) {
                bool jo = true;

                // 3 előtt páros
                if (szint > 1 && i == 3
                    && megoldas[szint-1]%2 == 0)
                {
                    jo = false;
                }

                // páros előtt 3
                if (szint > 1 && i % 2 == 0
                    && megoldas[szint-1] == 3)
                {
                    jo = false;
                }

                if (jo) {
                    megoldas[szint] = i;
                    f(szint+1, n, megoldas);
                }
            }
        }
    }
}

int main()
{
    int n;
    cin >> n;

    int megoldas[100];
    f(1, n, megoldas);

    return 0;
}



// 2. megoldás: permutációkat generálunk, és csak a végén ellenőrizzük a plusz
// feltételt (lassúbb)
/*
ofstream fout("kimenet.txt");

int f(int szint, int n, int megoldas[])
{
    if (szint > n) {
        bool jo = true;
        for (int i = 1; i <= n; i++) {
            if (megoldas[i] == 3) {
                if (i > 1 && megoldas[i-1] % 2 == 0)
                    jo = false;

                if (i < n && megoldas[i+1] % 2 == 0)
                    jo = false;
            }
        }

        if (jo) {
            for (int i = 1; i <= n; i++)
                fout << megoldas[i] << " ";
            fout << endl;
        }
    }
    else {
        for (int i = 1; i <= n; i++) {
            bool volt_mar = false;
            for (int j = 1; j < szint; j++)
                if (megoldas[j] == i)
                    volt_mar = true;

            if (!volt_mar) {
                megoldas[szint] = i;
                f(szint+1, n, megoldas);
            }
        }
    }
}

int main()
{
    int n;
    cin >> n;

    int megoldas[100];
    f(1, n, megoldas);

    return 0;
}
*/
