#include <bits/stdc++.h>
using namespace std;
int n,niz[1000010],niz2[1000010],prvi,drugi,max1,max1pos,max2,max2pos;
void ispis(){
    for(int i = 1; i <= n; i++){
        printf("%d ",niz[i]);
    }
}
int main (){
    scanf("%d",&n);
    bool poredjani=true,dvaista=false;
    int prvi=0,drugi=0;
    for(int i = 1; i <= n; i++){
        scanf("%d",&niz[i]);
        if(niz[i]>niz[i-1] and i!=1)poredjani=false;
        if(niz[i]==niz[i-1])dvaista=true;
        if(max1<=niz[i]){
            max1pos=i;
            max1=niz[i];
        }
    }
//    if(poredjani==true)cout<<1<<endl;
//    if(dvaista==true)cout<<2<<endl;
    if(poredjani==true and dvaista==true){
        ispis();
        return 0;
    }
    if(poredjani==true and dvaista==false){
        swap(niz[n],niz[n-1]);
        ispis();
        return 0;
    }
    max1=0;
    max1pos=0;
    int poz=0;
    if(poredjani==false){
        for(int i = 1; i <= n; i++){
            if(niz[i]>niz[i-1] and i!=1){poz=i-1;break;}
        }
        for(int i = poz; i <= n; i++){
            if(max1<=niz[i]){
                max1pos=i;
                max1=niz[i];
            }
        }
        int pos=1;
        while(1){
            if(niz[pos]<niz[max1pos]){
                swap(niz[pos],niz[max1pos]);
                ispis();
                return 0;
            }else{
                pos++;
            }
        }
    }
return 0;
}