#include <bits/stdc++.h>
using namespace std;
const int N = 3050, MAX_LOG = 16;
int b[N], n, res[N], maxi[N][MAX_LOG], maxi_id[N][MAX_LOG], lg[N], bst1, bst2,
    bst3, pointer1, pointer2, pointer3;
pair<int, int> a[N];
void sparse_table() {
  for (int i = 2; i < N; i++) lg[i] = lg[i / 2] + 1;
  for (int i = 0; i < n; i++) {
    maxi[i][0] = b[i];
    maxi_id[i][0] = i;
  }
  for (int i = 1; i < MAX_LOG; i++)
    for (int j = 0; j <= n - (1 << i); j++) {
      if (maxi[j][i - 1] >= maxi[j + (1 << (i - 1))][i - 1]) {
        maxi[j][i] = maxi[j][i - 1];
        maxi_id[j][i] = maxi_id[j][i - 1];
      } else {
        maxi[j][i] = maxi[j + (1 << (i - 1))][i - 1];
        maxi_id[j][i] = maxi_id[j + (1 << (i - 1))][i - 1];
      }
    }
}
int get_max(int l, int r) {
  int length = r - l, log2 = lg[length];
  if (maxi[l][log2] >= maxi[r - (1 << log2)][log2]) return maxi_id[l][log2];
  return maxi_id[r - (1 << log2)][log2];
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i].first;
    a[i].second = i;
  }
  sort(a, a + n);
  for (int i = 1; i < n; i++) b[i] = a[i].first - a[i - 1].first;
  b[0] = a[0].first;
  sparse_table();
  for (int i = n - 1; 0 < i; i--)
    for (int j = i - 1; 0 < j; j--) {
      int l1 = n - i, l2 = i - j;
      if (2 * l1 >= l2 && 2 * l2 >= l1) {
        int max1 = b[i], max2 = b[j],
            R = min(j - 1, j - max((l1 + 1) / 2, (l2 + 1) / 2)),
            L = max(0, j - min(2 * l1, 2 * l2));
        if (L <= R) {
          int t = get_max(L, R + 1);
          if (max1 > bst1 || (max1 == bst1 && max2 > bst2) ||
              (max1 == bst1 && max2 == bst2 && b[t] > bst3)) {
            bst1 = max1, bst2 = max2, bst3 = b[t];
            pointer1 = i, pointer2 = j, pointer3 = t;
          }
        }
      }
    }
  for (int i = 0; i < n; i++) {
    if (i < pointer3)
      res[a[i].second] = -1;
    else if (i < pointer2)
      res[a[i].second] = 3;
    else if (i < pointer1)
      res[a[i].second] = 2;
    else
      res[a[i].second] = 1;
  }
  for (int i = 0; i < n; i++) cout << res[i] << " ";
}
