#include <bits/stdc++.h>
using namespace std;
const int N = 3010;
int n;
int mx1, mx2, mx3, c1, c2, c3;
vector<pair<int, int> > a;
int stab[N][14];
int borderval[N];
inline void updatevals(int x, int y, int z) {
  int xx = a[x].first - a[x + 1].first;
  int yy = a[y].first - a[y + 1].first;
  int zz = a[z].first - (z == n - 1 ? 0 : a[z + 1].first);
  if ((xx > mx1) || (xx == mx1 && yy > mx2) ||
      (xx == mx1 && yy == mx2 && zz > mx3)) {
    mx1 = xx;
    mx2 = yy;
    mx3 = zz;
    c1 = x;
    c2 = y;
    c3 = z;
  }
}
void build() {
  for (int i = 0; i < n; i++) {
    borderval[i] = a[i].first;
    if (i < n - 1) borderval[i] -= a[i + 1].first;
  }
  for (int i = 0; i < n; i++) stab[i][0] = i;
  for (int j = 1; (1 << j) <= n; j++) {
    for (int i = 0; i + (1 << j) - 1 < n; i++) {
      if (borderval[stab[i][j - 1]] >
          borderval[stab[i + (1 << (j - 1))][j - 1]]) {
        stab[i][j] = stab[i][j - 1];
      } else {
        stab[i][j] = stab[i + (1 << (j - 1))][j - 1];
      }
    }
  }
}
int query(int l, int r) {
  int d = (int)(log(r - l + 1) / log(2.0));
  if (borderval[stab[l][d]] > borderval[stab[r - (1 << d) + 1][d]]) {
    return stab[l][d];
  } else
    return stab[r - (1 << d) + 1][d];
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    a.push_back({x, i});
  }
  sort(a.begin(), a.end());
  reverse(a.begin(), a.end());
  build();
  mx1 = a[0].first - a[1].first;
  mx2 = a[1].first - a[2].first;
  mx3 = a[2].first - (n == 3 ? 0 : a[3].first);
  c1 = 0;
  c2 = 1;
  c3 = 2;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      int cnt1 = i + 1;
      int cnt2 = j - i;
      if (!(cnt1 <= 2 * cnt2 && cnt2 <= 2 * cnt1)) continue;
      int mnc3 = (max(cnt1, cnt2) + 1) / 2;
      int mxc3 = 2 * min(cnt1, cnt2);
      int low = j + mnc3;
      int up = min(j + mxc3, n - 1);
      if (low >= n || (low > up)) continue;
      int qans = query(low, up);
      updatevals(i, j, qans);
    }
  }
  vector<int> b(n);
  for (int i = 0; i < a.size(); i++) {
    if (i <= c1) {
      b[a[i].second] = 1;
    } else if (i <= c2) {
      b[a[i].second] = 2;
    } else if (i <= c3) {
      b[a[i].second] = 3;
    } else {
      b[a[i].second] = -1;
    }
  }
  for (int u : b) printf("%d ", u);
  printf("\n");
  return 0;
}
