#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 repd(i,a,b) for(int i=a;i>=b;--i)
#define rvc(i,S) for(int i=0;i<(int)S.size();++i)
#define fore(i,x) for(int i = head[x] ; i ; i = e[i].next)
#define mp make_pair
#define pb push_back
#define maxn 1000005
#define ll long long 
#define fi first
#define se second
#define debug(...) fprintf(stderr,__VA_ARGS__)
using namespace std;
const ll INF = 0x3f3f3f3f;
int n,m;
int vis[maxn];
int a[maxn],f[maxn][2],Max[maxn*4][2];
pair<int,int> query(int node,int l,int r,int lx,int rx)
{ if(lx>rx) return mp(0,0);
  if(lx<=l&&rx>=r) return mp(Max[node][0],Max[node][1]);
  pair<int,int> ans=mp(0,0);
  int mid=(l+r)>>1;
  if(lx<=mid) ans=query(node<<1,l,mid,lx,rx);
  if(rx>=mid+1)
    { pair<int,int> y=query(node<<1|1,mid+1,r,lx,rx);
      ans.fi=max(ans.fi,y.fi);
      ans.se=max(ans.se,y.se);
	}
return ans;
}
void add(int node,int l,int r,int pos,int id)
{ if(l==r)
   {Max[node][0]=f[id][0];Max[node][1]=f[id][1];
    return;
   }
   int mid=(l+r)>>1;
   if(pos<=mid) add(node<<1,l,mid,pos,id);
   else         add(node<<1|1,mid+1,r,pos,id);
   Max[node][0]=max(Max[node<<1][0],Max[node<<1|1][0]);
   Max[node][1]=max(Max[node<<1][1],Max[node<<1|1][1]);
}
bool check(int val,int lef)
{ if(lef<0) return 0;
  pair<int,int> y=query(1,1,n,val+1,n);
  if(!((y.fi-lef)&1)) return y.first>=lef;
  else                return y.se>=lef;
}
signed main()
{ cin>>n;
  rep(i,1,n) scanf("%d",&a[i]);
  for(int x=0,i=1;i<=n;i++)
  { x=max(x,a[i]);
    if(x==a[i])  ++vis[i];
  }
  repd(i,n,1) vis[i]+=vis[i+1];
  repd(i,n,1)
   { int t=1+(vis[i]!=vis[i+1]);//1 or 2
     pair<int,int> y=query(1,1,n,a[i]+1,n);
     f[i][(y.fi+t)&1]=max(f[i][(y.fi+t)&1],y.fi+t);
     f[i][(y.se+t)&1]=max(f[i][(y.se+t)&1],y.se+t);
     add(1,1,n,a[i],i);
   }
  if(!check(0,vis[1])) {puts("-1");return 0;}	
  int len[2]={0},pos[2]={0};
  rep(i,1,n)
  { f[i][0]=f[i][1]=0;
    add(1,1,n,a[i],i);
	int x=a[i]>a[pos[0]]?i:pos[0];
	int y=len[0]+(x==i);
	if(check(a[x],len[1]+vis[i+1]-y)||check(a[pos[1]],y+vis[i+1]-len[1])) 
	 {putchar('0');
	  len[0]=y;
	  pos[0]=x;
	 }
	else
	 {pos[1]=a[i]>a[pos[1]]?i:pos[1];
	  len[1]+=pos[1]==i;
      putchar('1');
	 }
  }
return 0;	
}