#include <bits/stdc++.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;


void swap(int *a,int *b)
{
	int t=*a;
	*a=*b;
	*b=t;
	
}

void printArray(int arr[],long long n)
{  
   for(int i=0;i<n;i++)
   cout<<arr[i];
}

int findMax(int arr[],long long n,long long pocInd)
{
	int konacniInd=pocInd;
	
	int maks=arr[pocInd];
	
	for(int i=pocInd;i<n;i++)
	if(arr[i]>=maks)
	{   
	   maks=arr[pocInd];
	   konacniInd=i;
	}
	
	return konacniInd;
}

int arr[1000005];

int main(int argc, char** argv) {
	
	
	long long n;
	
	
	long long indeks,poslednjiOpadajuci;
	
	
	cin>>n;
	
	for(int i=0;i<n;i++)
	cin>>arr[i];
	

  if(n==2)                        // SAMO 2 CIFRE
  {
  	swap(arr[0],arr[1]);
  	
  	printArray(arr,n);
  	
  }
  
  else{
  	
  	
  	
  		if(arr[0]<arr[1])     //STRIKTNO RASTUCI NIZ
  		{ 
  		    indeks=findMax(arr,n,1);
  		    
  		    swap(arr[0],arr[indeks]);
  		    printArray(arr,n);
  		  
		  }
		  
		else{
		  int j=1;
		  
		 while(arr[j]<=arr[j-1])   //OPADAJUCE ILI JEDNAKO
		 j++;
		 
		j--;
		 
		 poslednjiOpadajuci=arr[j]; 
		 
		 indeks=findMax(arr,n,j+1);   // VRACA INDEKS MAKSIMUMA OSTATKA NIZA
		 
		
		              
		while(arr[indeks]>arr[j])
		{j--;
		if(j==0) break;
		}
		
		if(j!=0)
		swap(arr[indeks],arr[j+1]);
		else swap(arr[indeks],arr[0]);
		
		printArray(arr,n);  		
	  }
  	
  	
  	
  	
  }
  	
  	
  }