#include <bits/stdc++.h>
using namespace std;

int N;
int x_poz[300000];
int x_poz_n = 0;
int x_neg[300000];
int x_neg_n = 0;

int dementori_unisteni = 0;
uint8_t potezi[2000000];
int n_poteza = 0;
int update_counter = 0;

inline void napravi_potez(uint8_t p) {
    update_counter++;
    if(p == 1 && x_poz_n > 0) {
        dementori_unisteni++;
        x_poz_n--;
        if(x_poz_n > 0) {
            x_poz[x_poz_n - 1] -= update_counter;
        }
    } else if(p == 2 && x_neg_n > 0) {
        dementori_unisteni++;
        x_neg_n--;
        if(x_neg_n > 0) {
            x_neg[x_neg_n - 1] += update_counter;
        }
    } else if(p == 3) {
        x_poz[x_poz_n]--;
        x_neg[x_neg_n]++;
    }
    potezi[n_poteza] = p;
    n_poteza++;
}

void uradi() {
    sort(x_poz, x_poz + x_poz_n, [](const int& a, const int& b) -> bool {
        return a > b;
    });
    sort(x_neg, x_neg + x_neg_n);

    if(x_neg_n == 1 && x_poz_n == 0) {
        napravi_potez(2);
        return;
    }
    if(x_poz_n == 1 && x_neg_n == 0) {
        napravi_potez(1);
        return;
    }

    // ode nas hari svakako
    if(x_neg_n > 0 && x_neg[x_neg_n - 1] == -1 && x_poz_n > 0 && x_poz[x_poz_n - 1] == 1) {
        napravi_potez(1);
        return;
    }

    uint8_t poslednji_potez = -1;
    int max_potezi = 1000000;
    while(n_poteza < max_potezi && (x_poz_n > 0 || x_neg_n > 0)) { // ne sme iznad mil poteza
        uint8_t p = 0;
        if(poslednji_potez != 3 && x_neg[x_neg_n - 1] == -1 && x_poz[x_poz_n - 1] > 1 && poslednji_potez == 2) {
            p = 3;
        } else if(poslednji_potez != 1 && poslednji_potez != 2) {
            if(x_poz[x_poz_n - 1] < -x_neg[x_neg_n - 1]) {
                p = 1;
            } else {
                p = 2;
            }
        } else if(poslednji_potez == 2) {
            p = 1;
        } else {
            p = 2;
        }
        napravi_potez(p);
        poslednji_potez = p;
        //cout << "neg: " << x_neg[x_neg_n - 1] << " pos: " << x_poz[x_poz_n - 1] << endl;
        if(x_neg_n > 0 && x_neg_n > x_neg[x_neg_n - 1] == 0 && x_poz_n > 0 && x_poz[x_poz_n - 1] == 0) {
            return;
        }
    }
}

int main() {
    ios::sync_with_stdio(false);

    cin >> N;
    for(int i = 0; i < N; i++) {
        int x;
        cin >> x;

        if(x > 0) {
            x_poz[x_poz_n] = x;
            x_poz_n++;
        } else if(x < 0) {
            x_neg[x_neg_n] = x;
            x_neg_n++;
        }
    }

    uradi();

    cout << dementori_unisteni << '\n';
    for(int i = 0; i < n_poteza; i++) {
        cout << (int)potezi[i];
    }
    cout << '\n';

    return 0;
}