#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7;
long long fastpower(long long b, long long p) {
  long long ans = 1;
  while (p) {
    if (p % 2) {
      ans = (ans * b);
    }
    b = (b * b);
    p /= 2;
  }
  return ans;
}
string makeitstring(long long n) {
  string ans;
  while (n) {
    long long mod = n % 10;
    mod += 48;
    char m = mod;
    ans = m + ans;
    n /= 10;
  }
  return ans;
}
long long makeitnumber(string s) {
  long long ans = 0;
  for (long long i = 0; i < s.size(); i++) {
    long long num = s[i] - '0';
    ans += (num * fastpower(10, (long long)s.size() - i - 1));
  }
  return ans;
}
int arr[(int)1e3];
int main() {
  int n;
  scanf("%d", &n);
  n *= 2;
  vector<int> save;
  multiset<int> f, s;
  for (int i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    arr[x]++;
    save.push_back(x);
  }
  int cnt1 = 0;
  for (int i = 0; i < 1000; i++) {
    if (arr[i] > 1) {
      for (int j = 0; j < arr[i]; j++) {
        if (cnt1 % 2) {
          f.insert(i);
        } else {
          s.insert(i);
        }
        cnt1++;
      }
      arr[i] = 0;
    }
  }
  for (int i = 0; i < 1000; i++) {
    if (arr[i] == 1) {
      if (cnt1 % 2) {
        f.insert(i);
      } else {
        s.insert(i);
      }
      cnt1++;
    }
  }
  set<string> ans;
  for (auto it : f) {
    for (auto it2 : s) {
      string f = makeitstring(it);
      string s = makeitstring(it2);
      string h = s + f;
      ans.insert(h);
    }
  }
  printf("%d\n", ans.size());
  for (auto it : save) {
    if (f.count(it)) {
      printf("1 ");
      f.erase(f.find(it));
    } else {
      printf("2 ");
      s.erase(s.find(it));
    }
  }
  return 0;
}
