#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long INFF = 0x3f3f3f3f3f3f3f3fll;
const long long M = 1e9 + 7;
const long long maxn = 2e5 + 7;
const double eps = 0.00000001;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
template <typename T>
inline T abs(T a) {
  return a > 0 ? a : -a;
}
template <typename T>
inline T powMM(T a, T b) {
  T ret = 1;
  for (; b; b >>= 1ll, a = a * a % M)
    if (b & 1) ret = 1ll * ret * a % M;
  return ret;
}
int n, i, j;
pair<int, int> a[maxn], b[maxn][16];
int Log[maxn];
int ans[maxn];
int pos1, pos2, pos3;
int val1, val2, val3;
pair<int, int> query(int l, int r) {
  int log = Log[r - l + 1];
  return max(b[l][log], b[r - (1 << log) + 1][log]);
}
int main() {
  scanf("%d", &n);
  for (i = 0; i < n; i++) scanf("%d", &a[i].first), a[i].second = i + 1;
  sort(a, a + n);
  b[0][0] = make_pair(a[0].first, 0);
  for (i = 1; i < n; i++) b[i][0] = make_pair(a[i].first - a[i - 1].first, i);
  for (i = 0; i < 15; i++)
    for (j = 0; j < n; j++) b[j][i + 1] = max(b[j][i], b[j + (1 << i)][i]);
  Log[0] = -1;
  for (i = 1; i <= n; i++)
    if (!(i & (i - 1)))
      Log[i] = Log[i - 1] + 1;
    else
      Log[i] = Log[i - 1];
  for (i = n - 1; i >= 0; i--) {
    for (j = i - 1; j >= 0; j--) {
      int len3 = n - i, len2 = i - j;
      if (len3 > 2 * len2 || len2 > 2 * len3) continue;
      int minlen = max(1, (max(len2, len3) + 1) / 2);
      int maxlen = min(j, min(len2, len3) * 2);
      if (minlen > maxlen) continue;
      pair<int, int> k = query(j - maxlen, j - minlen);
      if (a[i].first - a[i - 1].first < val3) continue;
      if (a[i].first - a[i - 1].first == val3 &&
          a[j].first - a[j - 1].first < val2)
        continue;
      if (a[i].first - a[i - 1].first == val3 &&
          a[j].first - a[j - 1].first == val2 && k.first < val1)
        continue;
      val1 = k.first;
      val2 = a[j].first - a[j - 1].first;
      val3 = a[i].first - a[i - 1].first;
      pos1 = k.second;
      pos2 = j;
      pos3 = i;
    }
  }
  for (i = 0; i < pos1; i++) ans[a[i].second] = -1;
  for (i = pos1; i < pos2; i++) ans[a[i].second] = 3;
  for (i = pos2; i < pos3; i++) ans[a[i].second] = 2;
  for (i = pos3; i < n; i++) ans[a[i].second] = 1;
  for (i = 1; i <= n; i++) printf("%d ", ans[i]);
}
