#include <bits/stdc++.h>
using namespace std;
int use[210];
int a[210];
vector<int> g[210];
int ans[210];
int main() {
  memset(use, 0, sizeof(use));
  int n;
  scanf("%d", &n);
  int diff = 0, same = 0;
  for (int i = 0; i < n * 2; i++) {
    scanf("%d", &a[i]);
    use[a[i]]++;
    g[a[i]].push_back(i);
  }
  for (int i = 10; i <= 99; i++) {
    if (use[i] == 0) continue;
    if (use[i] == 1)
      diff++;
    else
      same++;
  }
  int maxx = 0, ansx, ansy, ansz;
  for (int x = 0; x <= diff; x++) {
    for (int y = 0; y <= same; y++) {
      for (int z = 0; z <= same - y; z++) {
        int ll = x + y + z, rr = (diff - x) + y + (same - y - z);
        if (ll <= n && rr <= n) {
          if (ll * rr > maxx) {
            maxx = ll * rr;
            ansx = x;
            ansy = y;
            ansz = z;
          }
        }
      }
    }
  }
  memset(ans, -1, sizeof(ans));
  int zeros = 0, ones = 0;
  for (int i = 10; i <= 99; i++) {
    if (use[i] == 0) continue;
    if (use[i] == 1) {
      if (ansx > 0) {
        ans[g[i][0]] = 0;
        zeros++;
        ansx--;
      } else {
        ans[g[i][0]] = 1;
        ones++;
      }
    } else {
      if (ansy > 0) {
        ans[g[i][0]] = 0;
        ans[g[i][1]] = 1;
        zeros++;
        ones++;
        ansy--;
      } else if (ansz > 0) {
        ans[g[i][0]] = 0;
        zeros++;
        ansz--;
      } else {
        ans[g[i][0]] = 1;
        ones++;
      }
    }
  }
  for (int i = 0; i < n * 2; i++) {
    if (ans[i] == -1) {
      if (zeros < n) {
        zeros++;
        ans[i] = 0;
      } else {
        ones++;
        ans[i] = 1;
      }
    }
  }
  printf("%d\n", maxx);
  for (int i = 0; i < n * 2; i++) {
    if (i != 0) printf(" ");
    printf("%d", ans[i] + 1);
  }
  puts("");
  return 0;
}
