#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
constexpr int N = 1919810;
int n;
vector<int> one;
vector<int> two;
long long tree[N];
vector<int> ress;
inline int lowbit (int id) {
return id & (-id);
}
void add (int id, long long num) {
for (; id <= n; id += lowbit (id)) {
tree[id] += num;
}
}
long long query (int id) {
long long res = 0;
for (; id; id -= lowbit (id)) {
res += tree[id];
}
return res;
}
long long cal (vector<int>& vec) {
long long res = 0;
int i = 0;
for (auto num : vec) {
res += i - query (num);
i++;
add (num, 1);
}
return res;
}
int main () {
freopen ("sort.in", "r", stdin);
freopen ("sort.out", "w", stdout);
cin >> n;
int num;
for (int i = 1; i <= n; i++) {
cin >> num;
if (i % 2) {
one.push_back(num);
}
else {
two.push_back(num);
}
}
long long res1 = cal (one);
memset (tree, 0, sizeof (tree));
long long res2 = cal (two);
sort (one.begin(), one.end());
sort (two.begin(), two.end());
for (int i = 1; i <= n; i++) {
if (i % 2) {
ress.push_back(one[i / 2]);
}
else {
ress.push_back(two[i / 2 - 1]);
}
}
if ((res1 % 2) != (res2 % 2)) {
iter_swap (ress.rbegin(), ress.rbegin() + 2);
}
for (auto res : ress) {
cout << res << ' ';
}
return 0;
}