OneCompiler

Next permutation

128
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace OneCompiler
{
	public class Program
	{
		public static void Main(string[] args)
		{
			int n = int.Parse(Console.ReadLine());
			
			int[] arr = Array.ConvertAll(Console.ReadLine().Split(" "), new Converter<string,int>(StringToInteger));
			
			var nextPermutation = NextPermutation(arr);
			
			for (int i = 0; i < nextPermutation.Length; i++)
			{
			  Console.Write(nextPermutation[i] + " ");
			}
		}
		
		private static int StringToInteger(string s)
		{
		  return int.Parse(s);
		}
		
		private static int[] NextPermutation(int[] arr)
		{
		  int n = arr.Length;
		  
		  if (n == 0 || n == 1)
		  {
		    return arr;
		  }
		  
		  int i, j;
		  for (i = n - 2; i >= 0; i--)
		  {
		    if (arr[i] < arr[i + 1])
		    {
		      break;
		    }
		  }
		  
		  if (i < 0)
		  {
		    Array.Reverse(arr);
		    
		    return arr;
		  }
		  else
		  {
		    
		    for (j = n - 1; j > i; j--)
		    {
		      if (arr[j] > arr[i])
		      {
		        break;
		      }
		    }
		    
		    var temp = arr[i];
		    arr[i] = arr[j];
		    arr[j] = temp;
		    
		    Array.Reverse(arr, i + 1, n - i - 1);
		    
		    return arr;
		  }
		}
	}
}