#include <bits/stdc++.h>
using namespace std;
int c[110] = {0}, ans[220] = {0};
int main(int argc, char const *argv[]) {
  int n;
  cin >> n;
  static queue<int> q[110];
  vector<pair<int, int> > p;
  for (int(i) = 0; (i) < (int)(n + n); ++(i)) {
    int x;
    cin >> x;
    ++c[x];
    q[x].push(i);
  }
  for (int(i) = (int)(1); (i) <= (int)(100); ++(i))
    if (c[i]) p.push_back(make_pair((c[i]), (i)));
  sort((p).begin(), (p).end());
  reverse((p).begin(), (p).end());
  int res = 0, ra;
  for (int(i) = (int)(1); (i) <= (int)((int)(p).size()); ++(i)) {
    int cnt = 0;
    for (int(j) = 0; (j) < (int)(i); ++(j)) cnt += p[j].first > 1;
    cnt += (int)(p).size() - i;
    if (i * cnt > res) res = i * cnt, ra = i;
  }
  printf("%d\n", res);
  fflush(stdout);
  int k = 0;
  for (int(i) = 0; (i) < (int)(ra); ++(i)) {
    --p[i].first;
    ans[q[p[i].second].front()] = 1;
    q[p[i].second].pop();
    k++;
  }
  while (k < n) {
    sort(p.begin(), p.begin() + ra, greater<pair<int, int> >());
    --p[0].first;
    ans[q[p[0].second].front()] = 1;
    q[p[0].second].pop();
    k++;
  }
  for (int(i) = 0; (i) < (int)(2 * n); ++(i)) {
    if (ans[i])
      printf("%d ", 1);
    else
      printf("%d ", 2);
  }
  puts("");
  return 0;
}
