#include <bits/stdc++.h>
using namespace std;
const int MXN = 2e2 + 10;
int n, r, t, A[MXN], B[MXN];
multiset<int> S[3];
vector<int> V;
int main() {
  scanf("%d", &n);
  for (int i = 0; i < 2 * n; i++) scanf("%d", &B[i]), A[B[i]]++;
  for (int i = 10; i < 100; i++) {
    if (A[i] > 1) {
      t++;
      S[0].insert(i);
      S[1].insert(i);
      for (int j = 0; j < A[i] - 2; j++) S[2].insert(i);
    }
    if (A[i] == 1) r++, V.push_back(i);
  }
  printf("%d\n", (r / 2 + t) * ((r + 1) / 2 + t));
  for (int i = 0; i < (int)V.size(); i++) {
    if (i + 1 <= (int)V.size() / 2)
      S[0].insert(V[i]);
    else
      S[1].insert(V[i]);
  }
  while (S[2].size() > 0) {
    if (S[0].size() <= S[1].size())
      S[0].insert(*S[2].begin());
    else
      S[1].insert(*S[2].begin());
    S[2].erase(S[2].begin());
  }
  for (int i = 0; i < 2 * n; i++) {
    if (S[0].count(B[i]) > 0) {
      printf("1 ");
      S[0].erase(S[0].lower_bound(B[i]));
      continue;
    }
    if (S[1].count(B[i]) > 0) {
      printf("2 ");
      S[1].erase(S[1].lower_bound(B[i]));
    }
  }
  return (0);
}
