#include <iostream>

using namespace std;
int main(int argc, char** argv) {

	long long n,max=0,maxi,brmax=0,brmaks=0;
	bool krmax=false;
	int pom;
	cin>>n;
	long long niz[n];
	/*unos u niz*/
	for(long long i=0;i<n;i++){
		cin>>niz[i];
	}
	/*ako je n=2*/
	if(n==2){
		pom=niz[0];
		niz[0]=niz[1];
		niz[1]=pom;
	}
	/*ako je n vece od dva*/
	else {
	for(long long i=0;i<n;i++){
		/*trazenje max*/
		for(long long j=i+1;j<n;j++){
			if(niz[j]>max){
				max=niz[j];
				maxi=j;	
			}
		}
		/*trazenje koliko ima istih max*/
		for(long long j=i+1;j<n;j++){
			if(niz[j]==max)brmax++;
			if(brmax>1)break;
		}
		/*trazenje pozicije prvog maks sa desne strane do 1*/
		if(brmax>1){
		for(long long j=n-1;j>i;j--){
			if(niz[j]==max){
				maxi=j;
				break;
			}
		}
		}
		/*zamena ako je maks vece od nekog broja*/
		for(long long a=i;a<maxi;a++){
			if(max>niz[a]){
				pom=niz[a];
				niz[a]=max;
				niz[maxi]=pom;
				krmax=true;
				break;
	   		}
		}
		if(krmax==true)break;
		if(brmax>1)brmaks++;
		max=0;
		brmax=0;
	}
 	if(krmax==false && brmaks==0){
 	pom=niz[n-1];
	niz[n-1]=niz[n-2];
	niz[n-2]=pom;
	 }
 } 
 	
	 
	/*ispis*/
	for(long long i=0;i<n;i++){
		cout<<niz[i]<<" ";
	}
	return 0;
}