#include <bits/stdc++.h>
static inline bool less(int a, int b) { return a < b; }
static inline bool less(int a1, int a2, int b1, int b2) {
  return a1 < b1 || a1 == b1 && less(a2, b2);
}
static inline bool less(int a1, int a2, int a3, int b1, int b2, int b3) {
  return a1 < b1 || a1 == b1 && less(a2, a3, b2, b3);
}
int const MAXN = 5005;
int const MAXA = 5005;
int N;
int a[MAXN], sa[MAXN], sd[MAXN];
int idx[MAXN];
int cnt[MAXA];
char ss[MAXN * 4];
int deq_val[MAXN * 2], deq_idx[MAXN * 2];
int main(int argc, char* argv[]) {
  memset(cnt, 0, sizeof(cnt));
  scanf("%d", &N);
  while (!(N >= 1 && N < MAXN)) printf("1");
  for (int i = 0; i < N; ++i) {
    scanf("%d", &a[i]);
    while (!(a[i] >= 1 && a[i] < MAXA)) printf("1");
    cnt[a[i]]++;
  }
  for (int i = MAXA - 1, sum = 0; i >= 0; --i) {
    int t = cnt[i];
    cnt[i] = sum;
    sum += t;
  }
  for (int i = 0; i < N; ++i) {
    int x = a[i];
    idx[cnt[x]] = i;
    sa[cnt[x]] = x;
    ++cnt[x];
  }
  idx[N] = -1;
  sa[N] = 0;
  for (int i = 0; i < N; ++i) sd[i] = sa[i] - sa[i + 1];
  int r1 = -1, r2 = -1, r3 = -1, i1, i2, i3;
  for (int i = 1; i <= N / 2; ++i) {
    if (less(sd[i - 1], r1)) continue;
    int j_min = (i + 1) >> 1;
    int j_max = std::min(N - i, i << 1);
    if (j_min > j_max) continue;
    int s = 0, t = 0, rk = -1;
    for (int j = j_min; j <= j_max; ++j) {
      if (less(sd[i - 1], sd[i + j - 1], r1, r2)) continue;
      int k_min = std::max((i + 1) >> 1, (j + 1) >> 1);
      int k_max = std::min(N - i - j, std::min(i << 1, j << 1));
      if (k_min > k_max) break;
      int k_i = i + j + k_min - 1, k_j = i + j + k_max;
      while (s < t && deq_idx[s] < k_i) ++s;
      while (s < t && deq_idx[t - 1] >= k_j) --t;
      if (s == t) s = t = 0;
      if (rk < k_i) rk = k_i;
      for (int k = rk; k < k_j; ++k) {
        while (s < t && deq_val[t - 1] <= sd[k]) --t;
        deq_val[t] = sd[k];
        deq_idx[t] = k;
        ++t;
      }
      rk = k_j;
      if (!less(sd[i - 1], sd[i + j - 1], deq_val[s], r1, r2, r3)) {
        r1 = sd[i - 1];
        r2 = sd[i + j - 1];
        r3 = deq_val[s];
        i1 = i - 1;
        i2 = i + j - 1;
        i3 = deq_idx[s];
      }
    }
  }
  for (int i = 0; i <= i1; ++i) {
    a[idx[i]] = 1;
  }
  for (int i = i1 + 1; i <= i2; ++i) {
    a[idx[i]] = 2;
  }
  for (int i = i2 + 1; i <= i3; ++i) {
    a[idx[i]] = 3;
  }
  for (int i = i3 + 1; i < N; ++i) {
    a[idx[i]] = -1;
  }
  int si = 0;
  for (int i = 0; i < N; ++i) {
    switch (a[i]) {
      case 1:
      case 2:
      case 3:
        ss[si++] = a[i] + '0';
        ss[si++] = ' ';
        break;
      default:
        ss[si++] = '-';
        ss[si++] = '1';
        ss[si++] = ' ';
        break;
    }
  }
  ss[si++] = '\0';
  puts(ss);
  return 0;
}
