#include <iostream>
using namespace std;
void ProcessThePermutation(int *arr, int arrLen)
{
while(--arrLen >= 0)
cout << *arr++;
cout << endl;
}
void ProcessAllPermutations(int arr[], int arrLen, int permLen)
{
if(permLen == 1)
ProcessThePermutation(arr, arrLen); // print the permutation
else
{
int lastpos = permLen - 1; // last item position for swaps
for(int pos = lastpos; pos >= 0; pos--) // pos of item to swap with the last
{
swap(arr[pos], arr[lastpos]); // put the chosen item at the end
ProcessAllPermutations(arr, arrLen, permLen - 1);
swap(arr[pos], arr[lastpos]); // put the chosen item back at pos
}
}
}
int main() {
// your code goes here
int arr[] = {2, 4, 7, 8};
ProcessAllPermutations(arr, 4, 4);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKICAgIHZvaWQgUHJvY2Vzc1RoZVBlcm11dGF0aW9uKGludCAqYXJyLCBpbnQgYXJyTGVuKQogICAgewogICAgICAgIHdoaWxlKC0tYXJyTGVuID49IDApCiAgICAgICAgICAgIGNvdXQgPDwgKmFycisrOwogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgIH0KCiAgICB2b2lkIFByb2Nlc3NBbGxQZXJtdXRhdGlvbnMoaW50IGFycltdLCBpbnQgYXJyTGVuLCBpbnQgcGVybUxlbikKICAgIHsKICAgICAgICBpZihwZXJtTGVuID09IDEpCiAgICAgICAgICAgIFByb2Nlc3NUaGVQZXJtdXRhdGlvbihhcnIsIGFyckxlbik7IC8vIHByaW50IHRoZSBwZXJtdXRhdGlvbgogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGludCBsYXN0cG9zID0gcGVybUxlbiAtIDE7ICAgICAgICAgIC8vIGxhc3QgaXRlbSBwb3NpdGlvbiBmb3Igc3dhcHMKCiAgICAgICAgICAgIGZvcihpbnQgcG9zID0gbGFzdHBvczsgcG9zID49IDA7IHBvcy0tKSAgICAgLy8gcG9zIG9mIGl0ZW0gdG8gc3dhcCB3aXRoIHRoZSBsYXN0CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN3YXAoYXJyW3Bvc10sIGFycltsYXN0cG9zXSk7ICAgICAgICAgICAvLyBwdXQgdGhlIGNob3NlbiBpdGVtIGF0IHRoZSBlbmQKICAgICAgICAgICAgICAgIFByb2Nlc3NBbGxQZXJtdXRhdGlvbnMoYXJyLCBhcnJMZW4sIHBlcm1MZW4gLSAxKTsKICAgICAgICAgICAgICAgIHN3YXAoYXJyW3Bvc10sIGFycltsYXN0cG9zXSk7ICAgICAgICAgICAvLyBwdXQgdGhlIGNob3NlbiBpdGVtIGJhY2sgYXQgcG9zCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglpbnQgYXJyW10gPSB7MiwgNCwgNywgOH07CglQcm9jZXNzQWxsUGVybXV0YXRpb25zKGFyciwgNCwgNCk7CglyZXR1cm4gMDsKfQ==