#include <bits/stdc++.h>
using namespace std;
long long int a, b, c, d, e, f, g, h, i, j,
    k = 0, l = 0, m = 1, n = 1, o, q = 0, r = 0, u, v, w, x, y, z, s, t, p = 0;
long long int temp = 0, ans = 0;
double f1, f2, f3, f4, f5, f6;
char c2, c3, c4, c5, c6;
vector<long long int> v11;
pair<long long int, long long int> p1, p2, p3;
map<long long int, long long int> mv;
long long int a12[200005], a13[200005];
bool b11[500006], c11[500006];
long long int a11[500006];
long long int gcd(long long int a, long long int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
void dfs(long long int i, vector<long long int> vg[], long long int m) {
  if (b11[i] == true) return;
  b11[i] = true;
  for (auto x11 : vg[i]) {
    if (b11[x11] == false) {
      dfs(x11, vg, m);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  t = 1;
  while (t--) {
    string s3, s1, s2;
    cin >> n;
    long long int bn, a11, p1, n1, c11, cn;
    long long int a1[n + 1], b1[n + 1], c1[n + 1];
    vector<long long int> vg[n + 1];
    map<char, long long int> m1, m2;
    queue<long long int> q2;
    vector<long long int> v1, v2;
    r = 0;
    temp = 0;
    p = q = 0;
    for (i = 0; i < n; i++) {
      cin >> a1[i];
    }
    sort(a1, a1 + n);
    i = 0;
    j = n - 1;
    k = 0;
    j = j / 2;
    while (k < n - 1) {
      if (k % 2 == 0) {
        b1[k] = a1[j];
        j++;
      } else {
        b1[k] = a1[i];
        i++;
      }
      k++;
    }
    b1[n - 1] = a1[n - 1];
    i = 0;
    j = n;
    k = 0;
    j = j / 2;
    while (k < n) {
      if (k % 2 == 0) {
        c1[k] = a1[j];
        j++;
      } else {
        c1[k] = a1[i];
        i++;
      }
      k++;
    }
    p = 0;
    for (i = 1; i < n - 1; i++) {
      if (b1[i] < b1[i - 1] && b1[i] < b1[i + 1]) {
        p++;
      }
    }
    q = 0;
    for (i = 1; i < n - 1; i++) {
      if (c1[i] < c1[i - 1] && c1[i] < c1[i + 1]) {
        q++;
      }
    }
    if (q > p) {
      cout << q << endl;
      for (i = 0; i < n; i++) cout << c1[i] << " ";
      return 0;
    }
    cout << p << endl;
    for (i = 0; i < n; i++) cout << b1[i] << " ";
    cout << endl;
  }
  return 0;
}
