#include <vector>
#include <iostream>
using namespace std;
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int i = nums.size() - 2;
while(i >= 0 && nums[i+1] <= nums[i]){
i--;
}
if(i >= 0){
int j = nums.size() - 1;
while(j >= 0 && nums[j] <= nums[i]){
j--;
}
swap(nums, i, j);
}
reverse(nums, i+1);
}
private:
void reverse(vector<int>& nums, int start){
int i = start, j = nums.size() - 1;
while(i < j){
swap(nums, i, j);
i++;
j--;
}
}
void swap(vector<int>& nums, int i, int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
};
int main(){
vector<int> nums = {1, 2, 3,4,5};
Solution s;
s.nextPermutation(nums);
for(auto& num : nums){
cout << num << " ";
}
cout << endl;
return 0;
}