#include <bits/stdc++.h>
using namespace std;
const long long inf = 2147383647;
const double pi = 2 * acos(0.0);
const double eps = 1e-9;
struct debugger {
  template <typename T>
  debugger& operator,(const T& v) {
    cerr << v << " ";
    return *this;
  }
} dbg;
inline long long gcd(long long a, long long b) {
  a = ((a) < 0 ? -(a) : (a));
  b = ((b) < 0 ? -(b) : (b));
  while (b) {
    a = a % b;
    swap(a, b);
  }
  return a;
}
int ext_gcd(int a, int b, int& x, int& y) {
  if (a == 0) {
    x = 0;
    y = 1;
    return b;
  }
  int x1, y1;
  int d = ext_gcd(b % a, a, x1, y1);
  x = y1 - (b / a) * x1;
  y = x1;
  return d;
}
inline long long modInv(int a, int m) {
  int x, y;
  ext_gcd(a, m, x, y);
  if (x < 0) x += m;
  return x;
}
inline long long power(long long a, long long p) {
  long long res = 1, x = a;
  while (p) {
    if (p & 1) res = (res * x);
    x = (x * x);
    p >>= 1;
  }
  return res;
}
inline long long bigmod(long long a, long long p, long long m) {
  long long res = 1, x = a % m;
  while (p) {
    if (p & 1) res = (res * x) % m;
    x = (x * x) % m;
    p >>= 1;
  }
  return res;
}
int lft[100010], rgt[100010];
struct LIS {
  int arr[100010], lisVal[100010], bbb[100010], n;
  void setVar(int _n) { n = _n; }
  int calculateLIS() {
    for (int i = (0); i <= (n); ++i) {
      bbb[i] = inf;
    }
    bbb[0] = -inf;
    int mx = 0;
    for (int i = (0); i <= (n - 1); ++i) {
      int v = arr[i];
      int pos = lower_bound(bbb, bbb + n, v) - bbb;
      lisVal[i] = pos;
      bbb[pos] = v;
      mx = ((mx) > (pos) ? (mx) : (pos));
    }
    return mx;
  }
} lis;
int answer[100010], have[100010];
int main() {
  int n;
  scanf("%d", &n);
  lis.setVar(n);
  for (int i = (0); i <= (n - 1); ++i) {
    scanf("%d", &lis.arr[i]);
  }
  int len = lis.calculateLIS();
  reverse(lis.arr, lis.arr + n);
  for (int i = (0); i <= (n - 1); ++i) {
    lft[i] = lis.lisVal[i];
    lis.arr[i] *= -1;
  }
  lis.calculateLIS();
  for (int i = (0); i <= (n - 1); ++i) rgt[i] = lis.lisVal[i];
  reverse(rgt, rgt + n);
  for (int i = (0); i <= (n - 1); ++i) {
    if (lft[i] + rgt[i] - 1 < len)
      answer[i] = 1;
    else
      have[lft[i]]++;
  }
  for (int i = (0); i <= (n - 1); ++i) {
    if (answer[i] == 1) continue;
    int val = lft[i];
    if (have[val] == 1)
      answer[i] = 3;
    else
      answer[i] = 2;
  }
  for (int i = (0); i <= (n - 1); ++i) printf("%d", answer[i]);
  puts("");
  return 0;
}
