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

#define MAX_POTEZI 1000000

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

string best_simulacija;
int best_unisteni = -1;

int simuliraj(string& s) {
    int unisteni = 0;
    int broj_poteza = 0;

    string potezi;
    while(broj_poteza < s.size() && (x_poz_n > 0 || x_neg_n > 0)) {
        //cout << "pocetno stnaje: " << x_poz[x_poz_n - 1] << endl;
        if(s[broj_poteza] == '1') {
            unisteni++;
            x_poz_n--;
            potezi += "1";
        } else if(s[broj_poteza] == '2') {
            unisteni++;
            x_neg_n--;
            potezi += "2";
        } else if(s[broj_poteza] == '3') {
            for(int i = 0; i < x_poz_n; i++) {
                x_poz[i]--;
            }
            for(int i = 0; i < x_neg_n; i++) {
                x_neg[i]--;
            }
            potezi += "3";
        }
        for(int i = 0; i < x_poz_n; i++) {
            x_poz[i]--;
        }
        for(int i = 0; i < x_neg_n; i++) {
            x_neg[i]++;
        }
        if(x_poz[x_poz_n - 1] == 0 || x_neg[x_neg_n - 1] == 0) {
            break;
        }
        broj_poteza++;
    }

    s = potezi;
    return unisteni;
}

void kombinacije(string s, int n) {
    if(n == 0) {
        int tren = simuliraj(s);
        //cout << s << " " << tren << '\n';
        if(tren > best_unisteni) {
            best_simulacija = s;
            best_unisteni = tren;
        }
    } else {
        if(s.size() == 0) {
            kombinacije("1", n-1);
            kombinacije("2", n-1);
            kombinacije("3", n-1);
        } else {
            if(s.back() == '1') {
                kombinacije(s + "2", n-1);
                kombinacije(s + "3", n-1);
            } else if(s.back() == '2') {
                kombinacije(s + "1", n-1);
                kombinacije(s + "3", n-1);
            } else if(s.back() == '3') {
                kombinacije(s + "1", n-1);
                kombinacije(s + "2", n-1);
            }
        }
    }
}

int main() {
    cin >> N;

    bool all_pos = true;
    bool all_neg = true;
    bool all_parni = true;
    for(int i = 0; i < N; i++) {
        int x;
        cin >> x;
        if(x > 0) {
            x_poz[x_poz_n] = x;
            x_poz_n++;

            all_neg = false;
            if(x % 2 == 0)
                all_parni = false;
        } else if(x < 0) {
            x_neg[x_neg_n] = x;
            x_neg_n++;

            all_pos = false;
            if((-x) % 2 == 0)
                all_parni = false;
        }
    }
    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) {
        cout << "1\n2\n";
        return 0;
    }
    if(x_poz_n == 1 && x_neg_n == 0) {
        cout << "1\n1\n";
        return 0;
    }

    // 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) {
        cout << "1\n1\n";
        return 0;
    }

    if(N <= 10) {
        kombinacije("", N);
        cout << best_unisteni << '\n';
        cout << best_simulacija << '\n';
    } else if(all_neg) {
        int d = N > MAX_POTEZI ? MAX_POTEZI : N;
        cout << d << '\n';
        for(int i = 0; i < d; i++) {
            cout << "23";
        }
        cout << '\n';
        return 0;
    } else if(all_pos || all_parni) {
        int unisteni = 0;

        bool prvi_potez = true;
        int broj_poteza = 0;
        string potezi = "";
        while(broj_poteza < MAX_POTEZI || x_poz_n > 0) {
            //cout << "pocetno stnaje: " << x_poz[x_poz_n - 1] << endl;
            if(prvi_potez) {
                unisteni++;
                x_poz_n--;
                if(x_poz_n > 0) {
                    x_poz[x_poz_n - 1] -= broj_poteza;
                    x_poz[x_poz_n - 1]--;
                }
                potezi += "1";
            } else {
                x_poz[x_poz_n - 1]--;
                potezi += "2";
            }
            if(x_poz[x_poz_n - 1] == 0) {
                break;
            }
            prvi_potez = !prvi_potez;
            broj_poteza++;
        }

        cout << unisteni << '\n' << potezi << '\n';
        return 0;
    }

    return 0;
}