#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define REP(i,n) for(int i=0;i<(n);i++)
using namespace std;

const int N=200005;
struct node{
	int a,b;
	node(int _a=0,int _b=0){
		if(!(_a&1))_a=0;
		if(_b&1)_b=0;
		a=_a,b=_b;
	}
	friend node operator + (node x,node y){
		return node(max(x.a,y.a),max(x.b,y.b));
	}
}T[N<<2];
int a[N],s[N],H[2],C[2];
char ans[N];
int n,mx;

#define lc (o<<1)
#define rc (o<<1|1)
#define mid ((l+r)>>1)
void upd(int o,int l,int r,int x,node y){
	if(l==r)return (void)(T[o]=y);
	if(x<=mid)upd(lc,l,mid,x,y);
	else upd(rc,mid+1,r,x,y);
	T[o]=T[lc]+T[rc];
}
node qry(int o,int l,int r,int x,int y){
	if(l==x&y==r)return T[o];
	if(y<=mid)return qry(lc,l,mid,x,y);
	if(mid<x)return qry(rc,mid+1,r,x,y);
	return qry(lc,l,mid,x,mid)+qry(rc,mid+1,r,mid+1,y);
}

int chk(int x,int val){
	node ret=qry(1,1,n,max(1,a[x]),n);
	int t[2]={ret.b,ret.a};
	return val>=0&&t[val&1]>=val;
}

int main(){
	scanf("%d",&n);
	rep(i,1,n){
		scanf("%d",&a[i]);
		mx=max(mx,a[i]);
		s[i]=(a[i]==mx);
	}
	per(i,n,1){
		node ret=qry(1,1,n,a[i],n);
		if(s[i]==1)upd(1,1,n,a[i],node(ret.a+2,ret.b+2));
		else upd(1,1,n,a[i],node(ret.b+1,ret.a+1));
		s[i]+=s[i+1];
	}
	if(!chk(0,s[1]))return puts("-1"),0;
	rep(i,1,n){
		int nH=(a[i]>a[H[0]]?i:H[0]);
		int nC=C[0]+(i==nH);
		upd(1,1,n,a[i],node(0,0));
		if(chk(nH,C[1]-nC+s[i+1])||chk(H[1],nC-C[1]+s[i+1]))
			H[0]=nH,C[0]=nC,ans[i]='0';
		else
			H[1]=(a[i]>a[H[1]]?i:H[1]),C[1]+=(i==H[1]),ans[i]='1';
	}
	puts(ans+1);
	return 0;
}