#include <iostream>
#include <cassert>
#include <cstdio>

using namespace std;
const int N = 1e7 + 5;
int Len, a[N];
int B[N], C[N], res[N];
/**
    C[]: temparary storage array
    res[]: store result array,
 */
int cntPos, pos[N], cntNeg, neg[N];

void input() {
    assert(freopen("CountingSort.inp", "r", stdin)); /// read your own input
    cin >> Len;
    for (int i = 1; i <= Len; i ++) {
        cin >> a[i];
        if (a[i] < 0) {
            ++ cntNeg;
            neg[cntNeg] = a[i];
        } else {
            ++ cntPos;
            pos[cntPos] = a[i];
        }
    }
}
void cntSort(int A[], int n) {
    int K = -1;
    for (int i = 1; i <= n; i ++)
        K = max(K, A[i]);
    for (int i = 0; i <= K; i ++)
        C[i] = 0;
    for (int i = 1; i <= n; i ++)
        ++ C[A[i]];
    for (int i = 1; i <= K; i ++)
        C[i] += C[i - 1];
    for (int j = n; j >= 1; j --) {
        B[C[A[j]]] = A[j];
        -- C[A[j]];
    }
}
void cntNegSort(int A[], int n) { /// case negative array
    for (int i = 1; i <= n; i ++)
        A[i] = -A[i];
    cntSort(A, n);
    for (int i = 1; i <= cntNeg; i ++) {
        res[i] = -B[cntNeg - i + 1];
    }
}
void cntPosSort(int A[], int n) { /// case Positive array
    cntSort(A, n);
    for (int i = 1; i <= cntPos; i ++)
        res[i + cntNeg] = B[i];
}
void output(int A[], int n) {
    cout << n << endl;
    for (int i = 1; i <= n; i ++)
        cout << A[i] << " ";
}
int main() {
    input();
    if (cntNeg != 0)
        cntNegSort(neg, cntNeg);
    if (cntPos != 0)
    cntPosSort(pos, cntPos);
    output(res, Len);
    return 0;
}
