#include <bits/stdc++.h>
using namespace std;
const long long N = 1e6 + 228;
const long long oo = 1e18 + 228;
const long long K = 300;
mt19937_64 rnd(time(0));
long long a[N], b[N], d[N];
bool usd[N];
long long n;
void solve() {
  cin >> n;
  for (long long i = 1; i <= n; ++i) cin >> a[i];
  sort(a + 1, a + 1 + n);
  long long l = 0, r = n / 2, c;
  long long now = 0, ans = -1;
  while (l <= r) {
    c = (l + r) / 2;
    for (long long i = 1; i <= n; ++i) usd[i] = 0, b[i] = -1;
    for (long long i = 1; i <= c; ++i) b[i * 2] = a[i], usd[i * 2] = 1;
    long long R = n;
    for (long long i = min(c * 2 + 1, n); i >= 1; --i) {
      if (!usd[i]) {
        b[i] = a[R--];
        usd[i] = 1;
      }
    }
    for (long long i = 1; i <= n; ++i) {
      if (!usd[i]) {
        usd[i] = 1;
        b[i] = a[R--];
      }
    }
    long long now = 0;
    for (long long i = 2; i <= n - 1; ++i)
      if (b[i] < b[i - 1] && b[i] < b[i + 1]) now++;
    if (now < c)
      r = c - 1;
    else {
      l = c + 1, ans = c;
      for (long long i = 1; i <= n; ++i) d[i] = b[i];
    }
  }
  cout << ans << endl;
  for (long long i = 1; i <= n; ++i) cout << d[i] << ' ';
  cout << endl;
}
int32_t main() {
  long long T = 1;
  for (long long z = 1; z <= T; ++z) {
    solve();
  }
  return 0;
}
