#include <bits/stdc++.h>
using namespace std;
vector<pair<long long int, long long int> > v(3010, make_pair(0, 0));
long long int n;
long long int an1 = 0, an2 = 0, an3 = 0, p1, p2, p3;
vector<vector<long long int> > stb(3010, vector<long long int>(25, 0));
long long int ln[3010];
void mkstb() {
  for (long long int i = 1; i <= n; i++) stb[i][0] = i;
  for (long long int j = 1; (1 << j) <= n; j++) {
    for (long long int i = 1; i + (1 << j) <= n + 1; i++) {
      long long int a1 = stb[i][j - 1], a2 = stb[i + (1 << (j - 1))][j - 1];
      stb[i][j] = v[a1].first - v[a1 + 1].first > v[a2].first - v[a2 + 1].first
                      ? a1
                      : a2;
    }
  }
  ln[1] = 0;
  for (long long int i = 2; i <= 3000; i++) ln[i] = ln[i / 2] + 1;
}
long long int mq(long long int l, long long int r) {
  long long int diff = ln[r - l + 1];
  long long int a0 = stb[l][diff], a1 = stb[r - (1 << diff) + 1][diff];
  long long int f1 = v[a0].first - v[a0 + 1].first;
  long long int f2 = v[a1].first - v[a1 + 1].first;
  return f1 > f2 ? a0 : a1;
}
int main() {
  cin >> n;
  for (long long int i = 1; i <= n; i++) {
    cin >> v[i].first;
    v[i].second = i;
  }
  sort(v.begin() + 1, v.end());
  reverse(v.begin() + 1, v.end());
  mkstb();
  long long int to1, to2, from2;
  for (long long int i = 1; i <= n; i++) {
    to1 = min(n, 3 * i);
    for (long long int j = i + (i + 1) / 2; j <= to1; j++) {
      to2 = min(n, min(j + 2 * i, j + 2 * (j - i)));
      from2 = j + max((i + 1) / 2, (j - i + 1) / 2);
      if (from2 > to2) continue;
      long long int k = mq(from2, to2);
      if (v[i].first - v[i + 1].first > an1 ||
          (v[i].first - v[i + 1].first == an1 &&
           v[j].first - v[j + 1].first > an2) ||
          (v[i].first - v[i + 1].first == an1 &&
           v[j].first - v[j + 1].first == an2 &&
           v[k].first - v[k + 1].first > an3)) {
        an1 = v[i].first - v[i + 1].first;
        an2 = v[j].first - v[j + 1].first;
        an3 = v[k].first - v[k + 1].first;
        p1 = i, p2 = j, p3 = k;
      }
    }
  }
  long long int ans[3000];
  long long int d = 1;
  for (long long int i = 1; i <= n; i++) {
    if (i == p1 + 1 || i == p2 + 1) d++;
    if (i == p3 + 1) d = -1;
    ans[v[i].second] = d;
  }
  for (long long int i = 1; i <= n; i++) {
    cout << ans[i] << " ";
  }
}
