#include <fstream>
#include <vector>
using namespace std;
int N;
vector<int> sol;
vector<bool> viz;
ifstream fin("permutari.in");
ofstream fout("permutari.out");
void backtracking(int k) {
if (k == N) {
for (int i = 0; i < N; ++i) {
fout << sol[i] << " ";
}
fout << "\n";
return;
}
for (int i = 1; i <= N; ++i) {
if (!viz[i]) {
viz[i] = true;
sol[k] = i;
backtracking(k + 1); // Trecem la urmatoarea pozitie
viz[i] = false; // Stergem marcajul la intoarcere
}
}
}
int main() {
if (!(fin >> N)) return 0;
sol.resize(N);
viz.resize(N + 1, false);
backtracking(0);
return 0;
}