#include <bits/stdc++.h>
using namespace std;
pair<int, int> a[3010];
int b[3010];
int n;
int bst[3010][15];
int mm[3010];
void init() {
  mm[0] = -1;
  for (int i = 1; i <= n; ++i) {
    mm[i] = ((i & (i - 1)) == 0) ? mm[i - 1] + 1 : mm[i - 1];
    bst[i][0] = i;
    b[i] = a[i].first - a[i + 1].first;
  }
  for (int j = 1; j <= mm[n]; ++j)
    for (int i = 1; i + (1 << j) - 1 <= n; ++i) {
      int x = bst[i][j - 1], y = bst[i + (1 << (j - 1))][j - 1];
      if (b[x] > b[y])
        bst[i][j] = x;
      else
        bst[i][j] = y;
    }
}
int rmq(int x, int y) {
  int k = mm[y - x + 1];
  y -= (1 << k) - 1;
  x = bst[x][k], y = bst[y][k];
  return b[x] > b[y] ? x : y;
}
int a1 = -1, a2 = -1, a3 = -1, id1, id2, id3;
bool cmp(int b1, int b2, int b3) {
  if (b1 != a1) return b1 > a1;
  if (b2 != a2) return b2 > a2;
  return b3 > a3;
}
int ans[3010];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i].first);
    a[i].second = i;
  }
  sort(a + 1, a + 1 + n);
  reverse(a + 1, a + 1 + n);
  init();
  int b1, b2, b3;
  for (int x = 1; x <= n; ++x)
    for (int y = (x + 1) / 2; y <= 2 * x && x + y < n; ++y) {
      b1 = b[x];
      b2 = b[x + y];
      int L = max((x + 1) / 2, (y + 1) / 2), R = min(2 * x, 2 * y);
      int st = x + y + L, en = min(n, x + y + R);
      if (st > n) continue;
      int p = rmq(st, en);
      b3 = b[p];
      if (cmp(b1, b2, b3)) {
        a1 = b1;
        a2 = b2;
        a3 = b3;
        id1 = x;
        id2 = y;
        id3 = p - (x + y);
      }
    }
  memset(ans, -1, sizeof(ans));
  for (int i = 1; i <= id1; ++i) ans[a[i].second] = 1;
  for (int i = 1; i <= id2; ++i) ans[a[i + id1].second] = 2;
  for (int i = 1; i <= id3; ++i) ans[a[i + id1 + id2].second] = 3;
  for (int i = 1; i <= n; ++i) printf("%d%c", ans[i], i == n ? '\n' : ' ');
  return 0;
}
