#include <bits/stdc++.h>
using namespace std;
long long read() {
  long long a = 0, b = getchar(), c = 1;
  while (!isdigit(b)) c = b == '-' ? -1 : 1, b = getchar();
  while (isdigit(b)) a = a * 10 + b - '0', b = getchar();
  return a * c;
}
int m1, m2, m3, mi, mj, mk, n, mx[3005][3005], jc[3005][3005], ans[3005];
struct P {
  int x, id;
} a[3005];
bool cmp(P u, P v) { return u.x > v.x; }
void gao(int d1, int d2, int d3, int i, int j, int k) {
  if (d1 > m1)
    goto fuck;
  else if (d1 < m1)
    return;
  if (d2 > m2)
    goto fuck;
  else if (d2 < m2)
    return;
  if (d3 > m3)
    goto fuck;
  else if (d3 < m3)
    return;
fuck:;
  m1 = d1, m2 = d2, m3 = d3;
  mi = i, mj = j, mk = k;
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) a[i].x = read(), a[i].id = i;
  sort(a + 1, a + n + 1, cmp);
  for (int i = 1; i <= n; i++) {
    mx[i][i] = a[i].x - a[i + 1].x;
    jc[i][i] = i;
    for (int j = i + 1; j <= n; j++)
      if (mx[i][j - 1] > a[j].x - a[j + 1].x)
        mx[i][j] = mx[i][j - 1], jc[i][j] = jc[i][j - 1];
      else
        mx[i][j] = a[j].x - a[j + 1].x, jc[i][j] = j;
  }
  for (int i = 1; i < n; i++)
    for (int j = (i + 1) / 2; j + i < n and 2 * i >= j; j++) {
      int lk = max((i + 1) / 2, (j + 1) / 2), uk = min(i * 2, j * 2);
      if (i + j + lk > n) continue;
      if (i + j + uk > n) uk -= i + j + uk - n;
      gao(a[i].x - a[i + 1].x, a[i + j].x - a[i + j + 1].x,
          mx[i + j + lk][i + j + uk], i, j, jc[i + j + lk][i + j + uk]);
    }
  for (int i = 1; i <= mi; i++) ans[a[i].id] = 1;
  for (int i = mi + 1; i <= mi + mj; i++) ans[a[i].id] = 2;
  for (int i = mi + mj + 1; i <= mk; i++) ans[a[i].id] = 3;
  for (int i = mk + 1; i <= n; i++) ans[a[i].id] = -1;
  for (int i = 1; i <= n; i++) printf("%d ", ans[i]);
  return 0;
}
