#include <bits/stdc++.h>
using namespace std;
int n;
pair<int, int> a[5555];
pair<int, int> max_det[5555][5555];
int ans_gap[11], det[11];
int l1, l2, l3;
int ans[5555];
int cmp(pair<int, int> &a, pair<int, int> &b) { return a.first > b.first; }
void upd(int _l1, int _l2, int _l3) {
  for (int i = 1; i <= 3; i++) {
    if (ans_gap[i] < det[i]) break;
    if (ans_gap[i] > det[i]) return;
  }
  for (int i = 1; i <= 3; i++) ans_gap[i] = det[i];
  l1 = _l1;
  l2 = _l2;
  l3 = _l3;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i].first);
    a[i].second = i;
  }
  sort(a, a + n, cmp);
  a[n] = make_pair(0, n);
  for (int i = 0; i < n; i++)
    for (int j = i; j < n; j++) {
      if (i == j)
        max_det[i][j] = make_pair(a[i].first - a[i + 1].first, i);
      else {
        int cur = a[j].first - a[j + 1].first;
        if (cur > max_det[i][j - 1].first)
          max_det[i][j] = make_pair(cur, j);
        else
          max_det[i][j] = max_det[i][j - 1];
      }
    }
  for (int i = 1; i <= 3; i++) ans_gap[i] = 0;
  for (int i = 1; i < n; i++) {
    det[1] = a[i - 1].first - a[i].first;
    if (det[1] < ans_gap[1]) continue;
    for (int j = 1; j < n; j++) {
      if (i * 2 < j || j * 2 < i || i + j > n) continue;
      det[2] = a[i + j - 1].first - a[i + j].first;
      if (det[1] == ans_gap[1] && det[2] < ans_gap[2]) continue;
      int l = max(1, (max(i, j) + 1) / 2);
      int r = min(n - i - j, min(i, j) * 2);
      if (l > r) continue;
      if (i + j + r > n || i + j + l > n) continue;
      int p = max_det[i + j + l - 1][i + j + r - 1].second;
      det[3] = a[p].first - a[p + 1].first;
      upd(i, j, p + 1 - i - j);
    }
  }
  memset(ans, -1, sizeof ans);
  for (int i = 0; i < l1; i++) ans[a[i].second] = 1;
  for (int i = l1; i < l1 + l2; i++) ans[a[i].second] = 2;
  for (int i = l1 + l2; i < l1 + l2 + l3; i++) ans[a[i].second] = 3;
  for (int i = 0; i < n; i++) printf("%d%c", ans[i], i < n - 1 ? ' ' : '\n');
  return 0;
}
