#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;
inline int read()
{
	int x = 0, f = 1; char ch = getchar();
	while(ch < '0' || ch > '9') {if(ch == '-') f = -1; ch = getchar();}
	while(ch >= '0' && ch <= '9') {x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar();}
	return x * f;
}
const int N = 1e6 + 1100,inf = 1e9;
int n,mx,a[N],val[N],sum[N];
char s[N];
struct node
{
	int tr[N << 2];
	void build(int k,int l,int r)
	{
		if(l == r) {tr[k] = -inf; return;}
		int mid = (l + r) >> 1;
		build(k << 1,l,mid); build(k << 1 | 1,mid + 1,r);
		tr[k] = max(tr[k << 1],tr[k << 1 | 1]);
	}
	void change(int k,int l,int r,int pos,int v)
	{
		if(l == r) {tr[k] = v; return;}
		int mid = (l + r) >> 1;
		if(pos <= mid) change(k << 1,l,mid,pos,v);
		else change(k << 1 | 1,mid + 1,r,pos,v);
		tr[k] = max(tr[k << 1],tr[k << 1 | 1]);
	}
	int ask(int k,int l,int r,int x,int y)
	{
		if(x <= l && y >= r) return tr[k];
		int mid = (l + r) >> 1,res = -inf;
		if(x <= mid) res = max(res,ask(k << 1,l,mid,x,y));
		if(y > mid)  res = max(res,ask(k << 1 | 1,mid + 1,r,x,y));
		return res;
	}
}Odd,Even;
int check(int mx,int Q)
{
	if(Q < 0) return 0;
	if(Q & 1) return Odd.ask(1,1,n,mx,n) >= Q;
	return Even.ask(1,1,n,mx,n) >= Q;
}
int main()
{
	n = read();
	for(int i = 1;i <= n;i ++)
	{
		a[i] = read();
		if(mx < a[i]) val[i] = 2,mx = a[i];
		else val[i] = 1;
	}
	Odd.build(1,1,n);
	for(int i = n,mx0,mx1;i >= 1;i --)
	{
		mx1 = Odd.ask(1,1,n,a[i],n); mx0 = Even.ask(1,1,n,a[i],n);
		if(val[i] & 1) Odd.change(1,1,n,a[i],mx0 + val[i]),Even.change(1,1,n,a[i],mx1 + val[i]);
		else Odd.change(1,1,n,a[i],mx1 + val[i]),Even.change(1,1,n,a[i],mx0 + val[i]);
	}
	for(int i = n;i >= 1;i --) sum[i] = sum[i + 1] + val[i] - 1;
	int cntx = 0,cnty = 0,mxx = 0,mxy = 0;
	for(int i = 1;i <= n;i ++)
	{
		Odd.change(1,1,n,a[i],-inf); Even.change(1,1,n,a[i],0);
		if(check(mxy,cntx + sum[i + 1] - cnty + (a[i] > mxx))) s[i] = '0',cntx += a[i] > mxx,mxx = max(mxx,a[i]);
		else if(check(max(mxx,a[i]),cnty + sum[i + 1] - cntx - (a[i] > mxx))) s[i] = '0',cntx += a[i] > mxx,mxx = max(mxx,a[i]);
		else s[i] = '1',cnty += a[i] > mxy,mxy = max(mxy,a[i]);
	}
	if(cntx != cnty) cout << "-1";
	else printf("%s",s + 1);
	fclose(stdin); fclose(stdout);
	return 0;
}
