#include <bits/stdc++.h>
template <class T>
bool chmin(T& a, const T& b) {
  return b < a ? a = b, 1 : 0;
}
template <class T>
bool chmax(T& a, const T& b) {
  return a < b ? a = b, 1 : 0;
}
using namespace std;
const int INF = INT_MAX;
const long long LNF = LONG_LONG_MAX;
inline int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
inline long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
inline int lcm(int a, int b) { return a * b / gcd(a, b); }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int t = 1;
  while (t--) {
    int n;
    cin >> n;
    long long a[n];
    for (int i = int(0); i < int(n); ++i) {
      cin >> a[i];
    }
    int l = 0, m = n / 2;
    sort(a, a + n);
    long long ans[n];
    for (int i = int(0); i < int(n); ++i) {
      if (i % 2 == 0) {
        ans[i] = a[m];
        m++;
      } else {
        ans[i] = a[l];
        l++;
      }
    }
    int final = 0;
    for (int i = int(0); i < int(n); ++i) {
      if (i >= 1 && ans[i - 1] > ans[i] && i < n - 1 && ans[i] < ans[i + 1]) {
        final++;
      }
    }
    cout << final << '\n';
    for (int i = 0; i < n; i++) cout << ans[i] << (i == n - 1 ? '\n' : ' ');
    ;
  }
  return 0;
}
