#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define pf push_front
#define popb pop_back
#define popf pop_front
#define srt(v) sort(v.begin(),v.end())
#define srtg(v,int) sort(v.begin(),v.end(),greater<int>())
#define lb(a,v) lower_bound(v.begin(),v.end(),a)
#define ub(a,v) upper_bound(v.begin(),v.end(),a)
#define fnd(a,v) find(v.begin(),v.end(),a)

using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef string str;
void ispisi(vector<int> &niz){
    for(int i:niz){
        cout<<i<<" ";
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin>>n;
    vector<int> niz(n);
    vector<int> pos(10,-1);
    for(int i=0;i<n;i++){
        cin>>niz[i];
        pos[niz[i]]=i;
    }
    bool moze=false;
    //ako moze da se poveca
    for(int i=0;i<n;i++){
        for(int j=9;j>niz[i];j--){
            if(pos[j]>i){
                moze=true;
                swap(niz[pos[j]],niz[i]);
                break;
            }
        }
        if(moze) break;
    }
    if(moze){ispisi(niz); return 0;}
    //dva ista
    for(int i=0;i<n;i++){
        if(pos[niz[i]]!=i){
            moze=true;
            break;
        }
    }
    if(moze){ispisi(niz); return 0;}
    //nema nade
    for(int i=n-1;i>=0;i--){
        for(int j=9;j>=0;j--){
            if(pos[j]>i){
                moze=true;
                swap(niz[pos[j]],niz[i]);
                break;
            }
        }
        if(moze) break;
    }
    ispisi(niz);
    return 0;
}