#include <bits/stdc++.h>
using namespace std;
const int N = 3000 + 5;
const int M = 13;
pair<int, int> a[N], f[N][M];
int deg[N], ans[N];
pair<int, int> get(int l, int r) {
  int k = deg[r - l + 1];
  return max(f[l][k], f[r - (1 << k) + 1][k]);
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    a[i] = pair<int, int>(x, i);
  }
  sort(a, a + n);
  f[0][0] = pair<int, int>(a[0].first, 0);
  for (int i = 1; i < n; i++)
    f[i][0] = pair<int, int>(a[i].first - a[i - 1].first, i);
  for (int j = 1; (1 << j) <= n; j++)
    for (int i = 0; i + (1 << j) <= n; i++)
      f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
  deg[0] = -1;
  for (int i = 1; i <= n; i++) {
    deg[i] = deg[i - 1];
    deg[i] += ((i & (i - 1)) == 0);
  }
  int x = -1, y = -1, z = -1, pi, pj, pk;
  for (int i = n - 1; i >= 0; i--)
    for (int j = i - 1; j >= 0; j--) {
      int l1 = n - i, l2 = i - j;
      if (l1 > 2 * l2 || l2 > 2 * l1) continue;
      int minlen = max({1, (l1 + 1) / 2, (l2 + 1) / 2});
      int maxlen = min({j, 2 * l1, 2 * l2});
      if (minlen > maxlen) continue;
      ;
      pair<int, int> p = get(j - maxlen, j - minlen);
      int df1 = f[i][0].first, df2 = f[j][0].first, df3 = p.first;
      if (df1 > x || (df1 == x && df2 > y) ||
          (df1 == x && df2 == y && df3 > z)) {
        x = df1, y = df2, z = df3;
        pi = i, pj = j, pk = p.second;
      }
    }
  for (int i = pi; i < n; i++) ans[a[i].second] = 1;
  for (int i = pj; i < pi; i++) ans[a[i].second] = 2;
  for (int i = pk; i < pj; i++) ans[a[i].second] = 3;
  for (int i = 0; i < pk; i++) ans[a[i].second] = -1;
  for (int i = 0; i < n; i++) cout << ans[i] << " ";
  return 0;
}
