#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;

struct classcomp {
	bool operator() (const char& lhs, const char& rhs) const
	{
		return lhs > rhs;
	}
};

vector<int> polica;
map<int, vector<int>, classcomp> sortirane_knige;

bool comp(int x, int y) 
{
	return y < x;
}

void Unos(int n)
{
	int knjiga;
	for (int i = 0; i < n; i++)
	{
		cin >> knjiga;
		polica.push_back(knjiga);
		sortirane_knige[knjiga].push_back(i);
	}

	for (auto itr = sortirane_knige.begin(); itr != sortirane_knige.end(); itr++)
	{
		sort((*itr).second.begin(), (*itr).second.end(), comp);
	}
}

void Ispis(int n) 
{
	for (int i = 0; i < n; i++)
	{
		cout << polica[i] << " ";
	}
}

void Swap(int i1, int i2) 
{
	int temp = polica[i1];
	polica[i1] = polica[i2];
	polica[i2] = temp;
}

void PreurediPolicu(int n)
{
	auto najveca_knjiga = sortirane_knige.begin();

	for (int i = 0; i < n; i++)
	{
		if (polica[i] < (*najveca_knjiga).first) 
		{
			Swap(i, *((*najveca_knjiga).second.begin()));
			return;
		}
		else if (polica[i] == (*najveca_knjiga).first) 
		{
			if ((*najveca_knjiga).second.size() == 1)
			{
				najveca_knjiga++;
			}
			else
			{
				(*najveca_knjiga).second.pop_back();
			}
		}
	}

	Swap(n - 2, n - 1);
}

int main()
{
	int n;
	cin >> n;

	Unos(n);

	PreurediPolicu(n);

	Ispis(n);

	return 0;
}