#include <algorithm>
#include <cstring>
#include <cstdio>
#define pb push_back
struct BIT
{
	int n, seg[200005], idx[4000005], orig[4000005], cnt;
	inline void init(int _n, int val = -0x3f)
	{
		n = _n;
		cnt = 0;
		memset(seg, val, n + 1 << 2);
	}
	inline void modify(int pos, int val)
	{
		for (; pos <= n; pos += pos & -pos)
		{
			idx[cnt] = pos;
			orig[cnt++] = seg[pos];
			seg[pos] = std::max(seg[pos], val);
		}
	}
	inline int query(int pos)
	{
		int res = -1e9;
		for (pos = std::min(pos, n); pos; pos -= pos & -pos)
			res = std::max(res, seg[pos]);
		return res;
	}
	inline void reset(int sz)
	{
		while (cnt > sz)
		{
			cnt--;
			seg[idx[cnt]] = orig[cnt];
		}
	}
} seg[2];
int arr[200005], suf[200005], val[200005], pos[200005][2];
int mn[2], len[2], nxt_mn[2], nxt_len[2], res[2];
char ans[200005];
int main()
{
	// freopen("AGC028-E.in", "r", stdin);
	// freopen("AGC028-E.out", "wt", stdout);
	int n, cur = 1e9;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", arr + i);
		arr[i] = n - arr[i] + 1;
		if (arr[i] < cur)
		{
			cur = arr[i];
			val[i] = 2;
		}
		else
			val[i] = 1;
	}
	seg[0].init(n, 0);
	seg[1].init(n);
	for (int i = n - 1; i >= 0; i--)
		suf[i] = suf[i + 1] + (val[i] == 2);
	for (int i = n - 1; i >= 0; i--)
	{
		for (int j = 0; j < 2; j++)
			res[j] = std::max(0, seg[j].query(arr[i]));
		for (int j = 0; j < 2; j++)
		{
			int x = res[j] + val[i] & 1;
			seg[x].modify(arr[i], res[j] + val[i]);
		}
		for (int j = 0; j < 2; j++)
			pos[i][j] = seg[j].cnt;
	}
	mn[0] = mn[1] = 1e9;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < 2; j++)
			seg[j].reset(pos[i + 1][j]);
		for (int j = 0; j < 2; j++)
		{
			memcpy(nxt_len, len, sizeof(len));
			memcpy(nxt_mn, mn, sizeof(mn));
			if (arr[i] < nxt_mn[j])
			{
				nxt_mn[j] = arr[i];
				nxt_len[j]++;
			}
			bool flg = false;
			if (i == n - 1)
				flg = nxt_len[0] == nxt_len[1];
			else
			{
				for (int k = 0; k < 2; k++)
				{
					int need = nxt_len[k] - nxt_len[k ^ 1] + suf[i + 1];
					if (need >= 0 && need <= seg[need & 1].query(nxt_mn[k ^ 1]))
						flg = true;
				}
			}
			if (flg)
			{
				ans[i] = j + '0';
				memcpy(mn, nxt_mn, sizeof(mn));
				memcpy(len, nxt_len, sizeof(len));
				break;
			}
		}
		if (!ans[i])
		{
			puts("-1");
			return 0;
		}
	}
	puts(ans);
	return 0;
}
