#include<bits/stdc++.h>
#define maxn 200005
using namespace std;
int n;
int x[maxn];
set<int> pos;
set<int> neg;
vector<int> k[3];
int simulate(int fst) {
    int ret = 0;
    int off = 0;
    int p = 0;
    pos.clear();
    neg.clear();
    for(int i = 1; i <= n; i++) {
        if(x[i] > 0) pos.insert(x[i]);
        else neg.insert(-x[i]);
    }
    off = 0;
    p = 0;
    while(!pos.empty() || !neg.empty()) {
        if(!pos.empty()) {
            int v=(*pos.begin())-off;
            if(v<=p) {
                break;
            }
        }
        if(!neg.empty()) {
            int v=-(*neg.begin())+off;
            if(v>=p) {
                break;
            }
        }
        if(k[fst].empty()) {
            k[fst].push_back(fst);
            if(fst==1) {
                if(!pos.empty()) {
                    pos.erase(pos.begin());
                    ret++;
                }
            }
            else {
                if(!neg.empty()) {
                    neg.erase(neg.begin());
                    ret++;
                }
            }
        }
        else {
            if(k[fst].back() == 3) {
                k[fst].push_back(2);
                if(!neg.empty()) {
                    neg.erase(neg.begin());
                    ret++;
                }
            }
            else {
                bool must_move = false;
                if(!neg.empty()) {
                    int v=-(*neg.begin())+off;
                    if(v + 1 >= p) {
                        must_move = true;
                    }
                }
                if(must_move && k[fst].back() == 2) {
                    k[fst].push_back(3);
                    p++;
                }
                else {
                    if(k[fst].back() == 1) {
                        k[fst].push_back(2);
                        if(!neg.empty()) {
                            neg.erase(neg.begin());
                            ret++;
                        }
                    }
                    else {
                        k[fst].push_back(1);
                        if(!pos.empty()) {
                            pos.erase(pos.begin());
                            ret++;
                        }
                    }
                }
            }
        }
        off++;
    }
    return ret;
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> x[i];
    }
    int ans1 = simulate(1);
    int ans2 = simulate(2);
    if(ans1 > ans2) {
        cout << ans1 << "\n";
        for(auto v : k[1]) {
            cout << v ;
        }
        cout<<endl;
    }
    else {
        cout << ans2 << "\n";
        for(auto v : k[2]) {
            cout << v ;
        }
        cout<<endl;
    }

    return 0;
}
