#include <stdio.h>
#include <stdlib.h>

struct element
{
    int br1,stepen1;
    int z,pozicija;
};

void zameni(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

void ispisi(int niz[], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("%d ", niz[i]);
    }

    printf("\n");
}

void quicksort(int niz[], long long int l, long long int n)
{
    if (l >= n)
    {
        return;
    }

    int pivot = niz[n];

    long long int br = l;

    for (int i = l; i <= n; i++)
    {
        if (niz[i] >= pivot)
        {
            zameni(&niz[br], &niz[i]);

            br++;
        }
    }

    quicksort(niz, l, br-2);
    quicksort(niz, br, n);

}
int main()
{
    bool p=true;
    long long int n;

    scanf("%lld",&n);

    int a[n-1],b[n-1];
    struct element vrednosti[n-1];
    struct element maks;

    for(int i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
        b[i] = a[i];
    }

    quicksort(b,0,n-1);

    for(int i=0;i<n;i++)
    {
        if (a[i] != b[i])
            p = false;

        vrednosti[i].br1 = b[i]-a[i];
        vrednosti[i].stepen1 =n-1-i;

        vrednosti[i].z = b[i];
        vrednosti[i].pozicija = i;
    }

    maks = vrednosti[0];

    for(int i=0;i<n;i++)
    {
        if(vrednosti[i].stepen1 >= maks.stepen1 && vrednosti[i].br1 > maks.br1 || maks.br1 == 0)
        {
            maks = vrednosti[i];
        }
    }

    if(p == true)
    {
        for(int i=0;i<n;i++)
            for(int j=i+1;j<n;j++)
                if(b[i] == b[j])
                {
                    ispisi(a,n);
                    return 0;
                }

        zameni(&a[n-1],&a[n-2]);
        ispisi(a,n);
        return 0;
    }

    int ind = 0;

    for(int i=n-1;i>0;i--)
        if(a[i] == maks.z)
        {
            ind =i;
            break;
        }

    zameni(&a[ind],&a[maks.pozicija]);

    ispisi(a,n);

    return 0;
}