#include <bits/stdc++.h>
using namespace std;
int x[222], n;
int y[222];
int more[222];
int main() {
  while (~scanf("%d", &n)) {
    int i, j;
    for (i = 1; i <= 2 * n; i++) scanf("%d", &x[i]);
    int ocur[111];
    memset(ocur, 0, sizeof ocur);
    memset(more, 0, sizeof more);
    for (i = 1; i <= 2 * n; i++) ocur[x[i]]++;
    for (i = 10; i <= 99; i++)
      if (ocur[i] > 1 && ocur[i] & 1) more[i] = 1;
    memset(y, -1, sizeof y);
    while (1) {
      int changed = 0;
      for (i = 10; i <= 99; i++) {
        if (ocur[i] > 1) {
          changed = 1;
          int aim = 2;
          for (j = 1; aim && j <= 2 * n; j++) {
            if (x[j] != i || y[j] != -1) continue;
            y[j] = aim--;
            ocur[i]--;
          }
        }
      }
      if (!changed) break;
    }
    int aim = 4 * n;
    for (i = 1; i <= 2 * n; i++)
      if (y[i] == -1 && more[x[i]]) {
        y[i] = (aim--) % 2 + 1;
      }
    for (i = 1; i <= 2 * n; i++)
      if (y[i] == -1) {
        y[i] = (aim--) % 2 + 1;
      }
    vector<int> l, r;
    for (i = 1; i <= 2 * n; i++)
      if (y[i] == 1)
        l.push_back(x[i]);
      else
        r.push_back(x[i]);
    set<int> S;
    for (i = 0; i < l.size(); i++)
      for (j = 0; j < r.size(); j++) S.insert(l[i] * 100 + r[j]);
    set<int>::iterator iter;
    printf("%d\n", (int)S.size());
    for (i = 1; i <= 2 * n; i++) printf("%d ", y[i]);
    printf("\n");
  }
  return 0;
}
