#include <bits/stdc++.h>
using namespace std;
const long long maxn = 3e5 + 10, Maxn = 10, lg = 22;
const long long mod = 1e9 + 7;
const long long inf = 1e18 + 10;
long long dp[maxn][lg], b[maxn], ans[maxn];
pair<long long, long long> a[maxn];
long long get(long long l, long long r) {
  if (l == r) return l;
  long long len = r - l, log = -1;
  while (len) {
    len >>= 1;
    log++;
  }
  if (b[dp[l][log]] > b[dp[r - (1 << log)][log]])
    return dp[l][log];
  else
    return dp[r - (1 << log)][log];
}
int32_t main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long n;
  cin >> n;
  for (long long i = 0; i < n; i++) cin >> a[i].first, a[i].second = i;
  sort(a, a + n);
  reverse(a, a + n);
  for (long long i = 0; i < n - 1; i++) {
    b[i] = abs(a[i].first - a[i + 1].first);
    dp[i][0] = i;
  }
  b[n - 1] = a[n - 1].first;
  dp[n - 1][0] = n - 1;
  for (long long j = 1; j < lg; j++) {
    for (long long i = 0; i < n; i++) {
      if (i + (1 << (j - 1)) > n) {
        dp[i][j] = dp[i][j - 1];
      } else {
        if (b[dp[i][j - 1]] < b[dp[i + (1 << (j - 1))][j - 1]]) {
          dp[i][j] = dp[i + (1 << (j - 1))][j - 1];
        } else {
          dp[i][j] = dp[i][j - 1];
        }
      }
    }
  }
  long long mx1 = -1, mx2 = -1, mx3 = -1;
  long long mx1i = -1, mx2i = -1, mx3i = -1;
  for (long long i = 0; i < n; i++) {
    for (long long j = i + 1; j < n; j++) {
      long long len1 = i + 1;
      long long len2 = j - i;
      if (len2 > len1 * 2 || len1 > len2 * 2) continue;
      long long l = j + max(1LL * 1, ((max(len1, len2) + 1) / 2));
      long long r = j + min(n - 1 - j, 2 * min(len1, len2));
      if (r < l) continue;
      long long tmpi = get(l, r + 1);
      long long tmp = b[tmpi];
      if (b[i] > mx1) {
        mx1i = i;
        mx2i = j;
        mx3i = tmpi;
        mx1 = b[i];
        mx2 = b[j];
        mx3 = tmp;
      } else if (b[i] == mx1 && b[j] > mx2) {
        mx1i = i;
        mx2i = j;
        mx3i = tmpi;
        mx1 = b[i];
        mx2 = b[j];
        mx3 = tmp;
      } else if (b[i] == mx1 && mx2 == b[j] && tmp > mx3) {
        mx1i = i;
        mx2i = j;
        mx3i = tmpi;
        mx1 = b[i];
        mx2 = b[j];
        mx3 = tmp;
      }
    }
  }
  for (long long i = 0; i <= mx1i; i++) {
    ans[a[i].second] = 1;
  }
  for (long long i = mx1i + 1; i <= mx2i; i++) {
    ans[a[i].second] = 2;
  }
  for (long long i = mx2i + 1; i <= mx3i; i++) {
    ans[a[i].second] = 3;
  }
  for (long long i = mx3i + 1; i < n; i++) {
    ans[a[i].second] = -1;
  }
  for (long long i = 0; i < n; i++) cout << ans[i] << ' ';
  cout << "\n";
  return 0;
}
