#include <iostream>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;

int main(){
    priority_queue<int,vector<int>,greater<int>> Jug;
    priority_queue<int> Sever;
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        int d;
        cin>>d;
        if(d<0)Jug.push(d);
        else if(d>0)Sever.push(d);
        else{
            cout<<0;
            return 0;
        }

    }
    int P_Korak=-1;
    int BrPoteza=0;
    int niz[n];
    int Ukupno=0;
    while(1){
        int PozSever,PozJug;
        PozSever=Sever.top()-BrPoteza;
        PozJug=Jug.top()+BrPoteza;
        if(PozSever==0||PozJug==0)break;
        int BlizaUd;
        BlizaUd=min(PozSever,abs(PozJug));
        int BlizaStr;
        if(BlizaUd==PozSever){
            BlizaStr=1;
        }
        else{
            BlizaStr=2;
        }
        if(BlizaStr==1&&P_Korak!=1){
            Sever.pop();
            Ukupno++;
            P_Korak=1;
        }
        else if(BlizaStr==1&&P_Korak==1){
            Jug.pop();
            Ukupno++;
            P_Korak=2;
        }
        else if(BlizaStr=2&&P_Korak!=2){
            Jug.pop();
            Ukupno++;
            P_Korak=2;
        }
        else if(BlizaStr==2&&BlizaUd==1&&P_Korak==2&&PozSever>3){
            P_Korak=3;
        }
        else if(BlizaStr==2&&BlizaUd==1&&P_Korak==2&&PozSever<=3){
            Sever.pop();
            Ukupno++;
            P_Korak=1;
        }
        niz[BrPoteza]=P_Korak;
        if(Ukupno==n)break;
        BrPoteza++;

    }
    cout<<Ukupno<<'\n';
    for(int i=0;i<BrPoteza;i++){
        cout<<niz[i];
    }
    return 0;
}