#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:10034217728")
using namespace std;
int n;
const int N = 3010;
pair<int, int> a[N];
int d[N];
int bt1 = -12321;
int bt2;
int bt3;
int bi;
int bj;
int bk;
void relax(int t1, int t2, int t3, int i, int j, int k) {
  if (t1 < bt1) return;
  if (t1 > bt1) goto NEED_RELAX;
  if (t2 < bt2) return;
  if (t2 > bt2) goto NEED_RELAX;
  if (t3 < bt3) return;
  if (t3 > bt3) goto NEED_RELAX;
NEED_RELAX:;
  bi = i;
  bj = j;
  bk = k;
  bt1 = t1;
  bt2 = t2;
  bt3 = t3;
}
const int K = 20;
pair<int, int> sparse[K][N];
void build_sparse() {
  for (int i = 0; i < n; i++) {
    sparse[0][i] = {d[i], i};
  }
  int curlen = 1;
  for (int k = 1; k < K; k++) {
    for (int i = 0; i < N; i++) {
      sparse[k][i] = sparse[k - 1][i];
      if (i + curlen < N)
        sparse[k][i] = max(sparse[k][i], sparse[k - 1][i + curlen]);
    }
    curlen *= 2;
  }
}
pair<int, int> find_max(int l, int r) {
  int k = 0;
  int len = 1;
  while (len <= r - l + 1) {
    len *= 2;
    k++;
  }
  len /= 2;
  k--;
  return max(sparse[k][l], sparse[k][r - len + 1]);
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i].first;
    a[i].second = i;
  }
  sort(a, a + n);
  reverse(a, a + n);
  for (int i = 0; i < n; i++) {
    d[i] = a[i].first - a[i + 1].first;
  }
  build_sparse();
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      int cnt1 = i + 1;
      int cnt2 = j - i;
      if (cnt1 * 2 < cnt2) continue;
      if (cnt2 * 2 < cnt1) continue;
      int kmax = min(cnt1, cnt2) * 2 + j;
      int kmin = max((cnt1 + 2 * j + 1) / 2, (cnt2 + 2 * j + 1) / 2);
      kmax = min(kmax, n - 1);
      kmin = max(kmin, j + 1);
      if (kmax >= kmin) {
        pair<int, int> kr = find_max(kmin, kmax);
        int t3 = kr.first;
        int k = kr.second;
        int t1 = a[i].first - a[i + 1].first;
        int t2 = a[j].first - a[j + 1].first;
        relax(t1, t2, t3, i, j, k);
      }
    }
  }
  vector<int> ans(n, -1);
  for (int i = 0; i <= bi; i++) {
    ans[a[i].second] = 1;
  }
  for (int i = bi + 1; i <= bj; i++) {
    ans[a[i].second] = 2;
  }
  for (int i = bj + 1; i <= bk; i++) {
    ans[a[i].second] = 3;
  }
  for (auto el : ans) cout << el << " ";
  return 0;
}
