#include <algorithm>
#include <iostream>
#include <vector>
std::vector<int> perm, chosen;
int n = 3;
void print(const std::vector<int>& v)
{
for (int e : v) {
std::cout << " " << e;
}
std::cout << std::endl;
}
void search() {
if (perm.size() == n) /// DEAD END
{
print(perm);
}
else {
for (int i = 0; i < n; i++) {
if (chosen[i]) continue; /// you have already taken this in your current path , so ignore it now
chosen[i] = true; /// take it , as you haven't already
perm.push_back(i);
search(); // go to the next step after taking this item
chosen[i] = false; // you have done all you could do with this , now get rid of it
perm.pop_back();
}
}
}
int main()
{
for(int i = 1; i <= n; i++) perm.push_back(i);
search();
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RkOjp2ZWN0b3I8aW50PiBwZXJtLCBjaG9zZW47CmludCBuID0gMzsKCnZvaWQgcHJpbnQoY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgdikKewogICAgZm9yIChpbnQgZSA6IHYpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIiAiIDw8IGU7CiAgICB9CiAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwp9Cgp2b2lkIHNlYXJjaCgpIHsKICAgIGlmIChwZXJtLnNpemUoKSA9PSBuKSAvLy8gREVBRCBFTkQKICAgIHsgCiAgICAgICAgcHJpbnQocGVybSk7CiAgICB9IAogICAgZWxzZSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCiAgICAgICAgICAgIGlmIChjaG9zZW5baV0pIGNvbnRpbnVlOyAvLy8geW91IGhhdmUgYWxyZWFkeSB0YWtlbiB0aGlzIGluIHlvdXIgY3VycmVudCBwYXRoICwgc28gaWdub3JlIGl0IG5vdwoKICAgICAgICAgICAgY2hvc2VuW2ldID0gdHJ1ZTsgLy8vIHRha2UgaXQgLCBhcyB5b3UgaGF2ZW4ndCBhbHJlYWR5CiAgICAgICAgICAgIHBlcm0ucHVzaF9iYWNrKGkpOwoKICAgICAgICAgICAgc2VhcmNoKCk7IC8vIGdvIHRvIHRoZSBuZXh0IHN0ZXAgYWZ0ZXIgdGFraW5nIHRoaXMgaXRlbQoKICAgICAgICAgICAgY2hvc2VuW2ldID0gZmFsc2U7IC8vIHlvdSBoYXZlIGRvbmUgYWxsIHlvdSBjb3VsZCBkbyB3aXRoIHRoaXMgLCBub3cgZ2V0IHJpZCBvZiBpdAogICAgICAgICAgICBwZXJtLnBvcF9iYWNrKCk7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpCnsKCWZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBwZXJtLnB1c2hfYmFjayhpKTsKCXNlYXJjaCgpOwp9