#include <iostream>
#define FIN "permutari.in"
#define FOUT "permutari.out"
#define SIZE 100
using namespace std;
int stack[ SIZE ],//pastreaza solutiile /permutarile
level,
n;//card
void init() {
stack[level ] = 0;
}
int succ() {
if(stack[ level ] < n) {
stack[level]++;
return 1;
}
return 0;
}
int valid() {
for(int i = 1; i < level; ++i) {
if(stack[level] == stack[i]) return 0;
}
return 1;
}
void display_solution() {
for(int i = 1; i <= n; ++i) {
cout<<stack[i]<<" ";
}
cout<<endl;
}
int sol() {
return level == n;
}
//iterativ
void backtracking() {
int s, v;
level = 1;
while( level > 0) {
s = 1; v = 0;
while( s && !v ) {
s = succ();
if( s ) {
v = valid();
}
}
if( s ) {
if( sol() ) {
display_solution();
} else {
level++;
init();
}
} else {
level--;
}
}
}
int main(int argc, char const *argv[]) {
//ifstream fin("fisier.txt");
//freopen(FIN, "r", stdin);
//freopen(FOUT, "w", stdout);
//n = 3
//A = { 1, 2, 3 }
//A = {"audi","car","bmw"}
cin>>n;
backtracking();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojZGVmaW5lIEZJTiAicGVybXV0YXJpLmluIgojZGVmaW5lIEZPVVQgInBlcm11dGFyaS5vdXQiCiNkZWZpbmUgU0laRSAxMDAKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgc3RhY2tbIFNJWkUgXSwvL3Bhc3RyZWF6YSBzb2x1dGlpbGUgL3Blcm11dGFyaWxlCiAgICBsZXZlbCwKICAgIG47Ly9jYXJkCgp2b2lkIGluaXQoKSB7CgogICAgc3RhY2tbbGV2ZWwgXSA9IDA7Cn0KCmludCBzdWNjKCkgewoKICAgICBpZihzdGFja1sgbGV2ZWwgXSA8IG4pIHsKCiAgICAgICAgc3RhY2tbbGV2ZWxdKys7CgogICAgICAgIHJldHVybiAxOwogICAgIH0KCiAgICAgcmV0dXJuIDA7Cn0KCgppbnQgdmFsaWQoKSB7CgogICAgZm9yKGludCBpID0gMTsgaSA8IGxldmVsOyArK2kpIHsKCiAgICAgICAgIGlmKHN0YWNrW2xldmVsXSA9PSBzdGFja1tpXSkgcmV0dXJuIDA7CiAgICB9CgogICAgcmV0dXJuIDE7Cgp9Cgp2b2lkIGRpc3BsYXlfc29sdXRpb24oKSB7CgogICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CgogICAgICAgIGNvdXQ8PHN0YWNrW2ldPDwiICI7CiAgICAgfQoKICAgICBjb3V0PDxlbmRsOwp9CgppbnQgc29sKCkgewoKICAgIHJldHVybiBsZXZlbCA9PSBuOwp9CgovL2l0ZXJhdGl2CnZvaWQgYmFja3RyYWNraW5nKCkgewoKICAgICBpbnQgcywgdjsKCiAgICAgbGV2ZWwgPSAxOwoKICAgICB3aGlsZSggbGV2ZWwgPiAwKSB7CgogICAgICAgICAgICBzID0gMTsgdiA9IDA7CgogICAgICAgICAgICB3aGlsZSggcyAmJiAhdiApIHsKCiAgICAgICAgICAgICAgICBzID0gc3VjYygpOwoKICAgICAgICAgICAgICAgIGlmKCBzICkgewoKICAgICAgICAgICAgICAgICAgIHYgPSB2YWxpZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiggcyApIHsKICAgICAgICAgICAgICAgICAgICAgaWYoIHNvbCgpICkgewoKICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X3NvbHV0aW9uKCk7CgogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCsrOwoKICAgICAgICAgICAgICAgICAgICAgICBpbml0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgICAgbGV2ZWwtLTsKICAgICAgICAgICAgfQogICAgIH0KfQoKCmludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICphcmd2W10pIHsKCgogICAgLy9pZnN0cmVhbSBmaW4oImZpc2llci50eHQiKTsKCiAgICAvL2ZyZW9wZW4oRklOLCAiciIsIHN0ZGluKTsKICAgIC8vZnJlb3BlbihGT1VULCAidyIsIHN0ZG91dCk7CgogICAvL24gPSAzCiAgIC8vQSA9IHsgMSwgMiwgMyB9CiAgIC8vQSA9IHsiYXVkaSIsImNhciIsImJtdyJ9CgogICAgY2luPj5uOwoKICAgIGJhY2t0cmFja2luZygpOwoKICByZXR1cm4gMDsKfQ==