#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void nextPermutation(vector<int> &arr) {
int n = arr.size();
// Find the pivot index
int pivot = -1;
for (int i = n - 2; i >= 0; i--) {
if (arr[i] < arr[i + 1]) {
pivot = i;
break;
}
}
// If pivot point does not exist, reverse the
// whole array
if (pivot == -1) {
reverse(arr.begin(), arr.end());
return;
}
// find the element from the right that
// is greater than pivot
for (int i = n - 1; i > pivot; i--) {
if (arr[i] > arr[pivot]) {
swap(arr[i], arr[pivot]);
break;
}
}
// Reverse the elements from pivot + 1 to the
// end to get the next permutation
reverse(arr.begin() + pivot + 1, arr.end());
}
int main() {
vector<int> arr = {0, 1, 2, 5, 7, 4 };
nextPermutation(arr);
for (int x : arr)
cout << x << " ";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAKI2luY2x1ZGUgPHZlY3Rvcj4gCiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIG5leHRQZXJtdXRhdGlvbih2ZWN0b3I8aW50PiAmYXJyKSB7CiAgCiAgICBpbnQgbiA9IGFyci5zaXplKCk7IAoKICAgICAvLyBGaW5kIHRoZSBwaXZvdCBpbmRleAogICAgaW50IHBpdm90ID0gLTE7IAogICAgZm9yIChpbnQgaSA9IG4gLSAyOyBpID49IDA7IGktLSkgewogICAgICAgIGlmIChhcnJbaV0gPCBhcnJbaSArIDFdKSB7CiAgICAgICAgICAgIHBpdm90ID0gaTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIC8vIElmIHBpdm90IHBvaW50IGRvZXMgbm90IGV4aXN0LCByZXZlcnNlIHRoZQogICAgLy8gd2hvbGUgYXJyYXkKICAgIGlmIChwaXZvdCA9PSAtMSkgewogICAgICAgIHJldmVyc2UoYXJyLmJlZ2luKCksIGFyci5lbmQoKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIGZpbmQgdGhlIGVsZW1lbnQgZnJvbSB0aGUgcmlnaHQgdGhhdAogICAgLy8gaXMgZ3JlYXRlciB0aGFuIHBpdm90CiAgICBmb3IgKGludCBpID0gbiAtIDE7IGkgPiBwaXZvdDsgaS0tKSB7CiAgICAgICAgaWYgKGFycltpXSA+IGFycltwaXZvdF0pIHsKICAgICAgICAgICAgc3dhcChhcnJbaV0sIGFycltwaXZvdF0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmV2ZXJzZSB0aGUgZWxlbWVudHMgZnJvbSBwaXZvdCArIDEgdG8gdGhlIAogICAgLy8gZW5kIHRvIGdldCB0aGUgbmV4dCBwZXJtdXRhdGlvbgogICAgcmV2ZXJzZShhcnIuYmVnaW4oKSArIHBpdm90ICsgMSwgYXJyLmVuZCgpKTsKfQoKaW50IG1haW4oKSB7CiAgICAKICAgIHZlY3RvcjxpbnQ+IGFyciA9IHswLCAxLCAyLCA1LCA3LCA0ICB9OwogICAgbmV4dFBlcm11dGF0aW9uKGFycik7ICAgIAogICAgZm9yIChpbnQgeCA6IGFycikgCiAgICAgICAgY291dCA8PCB4IDw8ICIgIjsgICAgCiAgICByZXR1cm4gMDsKfQo=