#include <bits/stdc++.h>
using namespace std;
string tostr(long long a) {
  stringstream rr;
  rr << a;
  return rr.str();
}
long long pow(long long c, long long d) { return d == 0 ?: c * pow(c, d - 1); }
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return ((a * b) / gcd(a, b)); }
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n;
  cin >> n;
  vector<long long> v(n), r(n);
  for (long long i = 0; i < n; i++) {
    cin >> v[i];
  }
  sort(v.begin(), v.end());
  for (long long i = 0; i < n; i += 2) {
    long long x = v[v.size() - 1];
    r[i] = x;
    v.pop_back();
  }
  long long ans = 0;
  sort(v.rbegin(), v.rend());
  for (long long i = 1, j = 0; i < n - 1; i += 2) {
    while (j < v.size()) {
      if (v[j] < r[i - 1] && v[j] < r[i + 1]) {
        r[i] = v[j];
        v[j] = 0;
        j++;
        break;
      } else
        j++;
    }
  }
  vector<long long> tmp;
  for (long long i = 0; i < v.size(); i++) {
    if (v[i] != 0) tmp.push_back(v[i]);
  }
  sort(tmp.begin(), tmp.end());
  for (long long i = 0, j = 0; i < n; i++) {
    if (r[i] == 0) {
      r[i] = tmp[j];
      j++;
    }
  }
  for (long long i = 1; i < n - 1; i += 2) {
    if (r[i] < r[i - 1] && r[i] < r[i + 1]) ans++;
  }
  cout << ans << endl;
  for (long long i = 0; i < n; i++) cout << r[i] << " ";
  cout << endl;
  return 0;
}
