#include <bits/stdc++.h>
using namespace std;
const int maxn = 3005;
int a[maxn], rk[maxn], ans[maxn], n, k, ans1 = -1, ans2, ans3 = -1;
int lg[maxn], L[maxn], R[maxn], d1, d2, d3, now1, now2;
pair<int, int> mx[maxn * 2][15];
vector<pair<int, int> > tmp;
bool cmp(int x, int y) { return a[x] < a[y]; }
void init() {
  lg[0] = -1;
  for (int i = (1); i <= (n); i++) lg[i] = lg[i >> 1] + 1;
  for (int i = (1); i <= (n); i++) mx[i][0] = make_pair(a[i] - a[i - 1], i);
  for (int j = (1); j <= (13); j++)
    for (int i = (1); i <= (n); i++)
      mx[i][j] = max(mx[i][j - 1], mx[i + (1 << (j - 1))][j - 1]);
}
pair<int, int> query(int l, int r) {
  int tmp = lg[r - l + 1];
  return max(mx[l][tmp], mx[r - (1 << tmp) + 1][tmp]);
}
int main() {
  scanf("%d", &n);
  for (int i = (1); i <= (n); i++) scanf("%d", &a[i]), rk[i] = i;
  sort(rk + 1, rk + n + 1, cmp);
  sort(a + 1, a + n + 1);
  init();
  for (int i = (1); i <= (n / 2); i++)
    for (int j = (i / 2); j <= (min(i * 2, n / 2)); j++) {
      if (max(i, j) > 2 * min(i, min(j, n - i - j))) continue;
      now1 = a[n - i + 1] - a[n - i];
      now2 = a[n - i - j + 1] - a[n - i - j];
      if (now1 > ans1 || now1 == ans1 && now2 > ans2) {
        ans1 = now1;
        ans2 = now2;
        tmp.clear();
        tmp.push_back(make_pair(i, j));
      } else if (ans1 == now1 && ans2 == now2)
        tmp.push_back(make_pair(i, j));
    }
  for (auto x : tmp) {
    int c1 = x.first, c2 = x.second, l, r;
    pair<int, int> now;
    l = max(1, n + 1 - c1 - c2 - min(c1, c2) * 2);
    r = n + 1 - c1 - c2 - (max(c1, c2) + 1) / 2;
    if (l <= r) {
      now = query(l, r);
      if (now.first > ans3) {
        ans3 = now.first;
        d1 = c1;
        d2 = c2;
        d3 = n - c1 - c2 - now.second + 1;
      }
    }
  }
  for (int i = (n); i >= (1); i--)
    if (d1)
      a[i] = 1, d1--;
    else if (d2)
      a[i] = 2, d2--;
    else if (d3)
      a[i] = 3, d3--;
    else
      a[i] = -1;
  for (int i = (1); i <= (n); i++) ans[rk[i]] = i;
  for (int i = (1); i <= (n); i++) printf("%d ", a[ans[i]]);
  return 0;
}
