#include <bits/stdc++.h>
using namespace std;
int t[100001], wyn[100001], t1[100001];
vector<int> LAS[100001];
vector<int> SAL[100001];
int mx = 0;
void wypelniacz(int i, int n);
void rwypelniacz(int i, int n);
int main() {
  ios_base::sync_with_stdio(0);
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> t[i];
    wypelniacz(i, n);
  }
  for (int i = n; i >= 1; i--) {
    rwypelniacz(i, n);
  }
  for (int i = 1; i <= mx; i++) {
    for (int j = 0; j < LAS[i].size(); j++) {
      wyn[LAS[i][j]] += i;
    }
    for (int j = 0; j < SAL[i].size(); j++) {
      wyn[SAL[i][j]] += i - 1;
    }
  }
  int makser = 10000000;
  for (int i = n; i >= 1; i--) {
    if (wyn[i] == mx) {
      t1[i] = makser;
      if (t[i] < makser) {
        makser = t[i];
      }
    }
  }
  makser = 0;
  for (int i = 1; i <= n; i++) {
    if (wyn[i] == mx) {
      if (t[i] > makser && t[i] < t1[i]) {
        cout << '3';
      } else
        cout << '2';
      if (t[i] > makser) makser = t[i];
    } else
      cout << '1';
  }
  return 0;
}
void wypelniacz(int i, int n) {
  int s;
  int l = 1;
  int p = n;
  while (p - l >= 0) {
    s = (l + p) / 2;
    if (!LAS[s].empty() && t[LAS[s].back()] == t[i]) {
      LAS[s].push_back(i);
      return;
    } else if (!LAS[s].empty() && t[LAS[s].back()] < t[i])
      l = s + 1;
    else
      p = s - 1;
  }
  if (LAS[s].empty())
    LAS[s].push_back(i);
  else if (t[LAS[s].back()] < t[i])
    LAS[++s].push_back(i);
  else
    LAS[s].push_back(i);
  if (s > mx) mx = s;
}
void rwypelniacz(int i, int n) {
  int s;
  int l = 1;
  int p = n;
  while (p - l >= 0) {
    s = (l + p) / 2;
    if (!SAL[s].empty() && t[SAL[s].back()] == t[i]) {
      SAL[s].push_back(i);
      return;
    } else if (!SAL[s].empty() && t[SAL[s].back()] > t[i])
      l = s + 1;
    else
      p = s - 1;
  }
  if (SAL[s].empty())
    SAL[s].push_back(i);
  else if (t[SAL[s].back()] > t[i])
    SAL[++s].push_back(i);
  else
    SAL[s].push_back(i);
}
