#include <bits/stdc++.h>
#define rep(i, a, b) for (int i = (a); i <= int(b); i++)
#define per(i, a, b) for (int i = (a); i >= int(b); i--)
#define fir first
#define sec second
#define tct template<class type>
using namespace std;

typedef long long ll;
typedef pair<int, int> P;
const int maxn = 2e5, maxm = 1 << 19, mod = 1e9 + 7;
int n, p[maxn + 5], a[maxn + 5], cnt[maxn + 5];
char s[maxn + 5];

inline void red(int &x) { x += x >> 31 & mod; }
tct inline void cmax(type &x, type y) { x < y ? x = y : 0; }
tct inline void cmin(type &x, type y) { x > y ? x = y : 0; }

struct tree {
	int mx[maxm + 5];
	#define ls (x << 1)
	#define rs (ls | 1)
	#define mid ((l + r) >> 1)
	void upd(int x) {
		mx[x] = max(mx[ls], mx[rs]);
	}
	void build(int x, int l, int r) {
		mx[x] = -1e9;
		if (l == r) return;
		build(ls, l, mid), build(rs, mid + 1, r);
	}
	void modify(int x, int l, int r, int y, int z) {
		if (l == r) return mx[x] = z, void();
		y <= mid ? modify(ls, l, mid, y, z) : modify(rs, mid + 1, r, y, z);
		upd(x);
	}
	int query(int x, int l, int r, int lx, int rx) {
		if (l >= lx && r <= rx) return mx[x];
		int y = -1e9;
		if (lx <= mid) cmax(y, query(ls, l, mid, lx, rx));
		if (rx > mid) cmax(y, query(rs, mid + 1, r, lx, rx));
		return y;
	}
} odd, eve;

bool check(int x, int y) {
	if (y < 0) return false;
	if (y & 1) return odd.query(1, 1, n, x, n) >= y;
	return eve.query(1, 1, n, x, n) >= y;
}

int main() {
	scanf("%d", &n);
	for (int i = 1, x = 0; i <= n; i++) {
		scanf("%d", &p[i]);
		if (x < p[i]) a[i] = 1, x = p[i];
	}
	odd.build(1, 1, n);
	per(i, n, 1) {
		int x = odd.query(1, 1, n, p[i], n), y = eve.query(1, 1, n, p[i], n);
		if (a[i]) odd.modify(1, 1, n, p[i], x + 2), eve.modify(1, 1, n, p[i], y + 2);
		else odd.modify(1, 1, n, p[i], y + 1), eve.modify(1, 1, n, p[i], x + 1);
	}
	per(i, n, 1) cnt[i] = cnt[i + 1] + a[i];
	int xc = 0, yc = 0, xm = 0, ym = 0;
	rep(i, 1, n) {
		odd.modify(1, 1, n, p[i], -1e9), eve.modify(1, 1, n, p[i], 0);
		int nxc = xc + (p[i] > xm);
		if (check(ym, nxc + cnt[i + 1] - yc) || check(max(xm, p[i]), yc + cnt[i + 1] - nxc)) {
			s[i] = '0', xc += p[i] > xm, xm = max(xm, p[i]);
		} else {
			s[i] = '1', yc += p[i] > ym, ym = max(ym, p[i]);
		}
	}
	if (xc != yc) puts("-1"), exit(0);
	puts(s + 1);
	return 0;
}