#include <bits/stdc++.h>
using namespace std;
const int nm = 3010;
int n;
pair<int, int> a[nm];
int kq[nm];
int f[nm];
int rmq[nm][20];
int getmax(int u, int v) {
  int k = log(v - u + 1) / log(2);
  if (f[rmq[u][k]] > f[rmq[v - (1 << k) + 1][k]]) return rmq[u][k];
  return rmq[v - (1 << k) + 1][k];
}
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 + n + 1);
  for (int i = 1; i < n; ++i) {
    f[i] = a[i + 1].first - a[i].first;
  }
  for (int i = n - 1; i >= 1; --i) {
    rmq[i][0] = i;
    for (int j = 1; i + (1 << j) - 1 < n; ++j) {
      if (f[rmq[i][j - 1]] > f[rmq[i + (1 << (j - 1))][j - 1]])
        rmq[i][j] = rmq[i][j - 1];
      else
        rmq[i][j] = rmq[i + (1 << (j - 1))][j - 1];
    }
  }
  int d1 = -1, d2 = -1, d3 = -1;
  int vt1 = -1, vt2 = -1, vt3 = -1;
  a[0] = make_pair(0, 0);
  for (int i = 0; i <= n - 3; ++i) {
    int d11 = a[i + 1].first - a[i].first;
    for (int j = i + 1; j <= n - 2; ++j) {
      int d22 = a[j + 1].first - a[j].first;
      int n1 = j - i;
      int umin = max(j + 1, max((n1 + 2 * j + 1) / 2,
                                max(n - 2 * n1, (n + 2 * j + 2) / 3)));
      int umax =
          min(n - 1, min(2 * n1 + j, min((2 * n - n1) / 2, (2 * n + j) / 3)));
      if (umin > umax) continue;
      int vt33 = getmax(umin, umax);
      int d33 = f[vt33];
      bool kt = 0;
      if (d33 > d3)
        kt = 1;
      else if (d33 == d3) {
        if (d22 > d2)
          kt = 1;
        else if (d22 == d2) {
          kt = d11 > d1;
        }
      }
      if (kt) {
        vt1 = i;
        vt2 = j;
        vt3 = vt33;
        d1 = d11;
        d2 = d22;
        d3 = d33;
      }
    }
  }
  for (int i = 1; i <= n; ++i)
    kq[a[i].second] = (i <= vt1 ? -1 : (i <= vt2 ? 3 : (i <= vt3 ? 2 : 1)));
  for (int i = 1; i <= n; ++i) printf("%d ", kq[i]);
}
