#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
template <typename T>
void write(T x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x > 9) {
    write(x / 10);
  }
  putchar(x % 10 + '0');
}
template <typename T>
void read(T &x) {
  x = 0;
  char ch = getchar();
  long long f = 1;
  while (!isdigit(ch)) {
    if (ch == '-') f *= -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - 48;
    ch = getchar();
  }
  x *= f;
}
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
int lcm(int a, int b) { return a / gcd(a, b) * b; };
long long ksm(long long a, long long n) {
  long long ans = 1;
  while (n) {
    if (n & 1) ans = (ans * a) % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return ans % mod;
}
const int maxn = 205 + 10;
int n, a[maxn];
map<int, int> cnt1, cnt2, cnt;
map<int, int> save;
map<int, queue<int>> idx;
int belong[maxn];
int st1[maxn], st2[maxn], top1, top2;
vector<pair<int, int>> da;
int main() {
  read(n);
  for (int i = 1; i <= 2 * n; ++i) read(a[i]), idx[a[i]].push(i), cnt[a[i]]++;
  int pos = 0;
  for (auto &x : cnt) {
    if (x.second > 1) {
      int num = x.second / 2;
      x.second %= 2;
      for (int i = 0; i < num; ++i) {
        st1[++top1] = x.first;
        int pos1 = idx[x.first].front();
        idx[x.first].pop();
        belong[pos1] = 1;
        st2[++top2] = x.first;
        int pos2 = idx[x.first].front();
        idx[x.first].pop();
        belong[pos2] = 2;
      }
      if (x.second == 1) {
        if (!pos) {
          st1[++top1] = x.first;
          int pos1 = idx[x.first].front();
          idx[x.first].pop();
          belong[pos1] = 1;
        } else {
          st2[++top2] = x.first;
          int pos2 = idx[x.first].front();
          idx[x.first].pop();
          belong[pos2] = 2;
        }
        x.second--;
        pos ^= 1;
      }
    }
  }
  for (auto x : cnt) {
    if (!x.second) continue;
    if (top1 < n) {
      st1[++top1] = x.first;
      x.second--;
      int pos = idx[x.first].front();
      idx[x.first].pop();
      belong[pos] = 1;
    } else {
      st2[++top2] = x.first;
      x.second--;
      int pos = idx[x.first].front();
      idx[x.first].pop();
      belong[pos] = 2;
    }
    pos ^= 1;
  }
  set<int> s;
  int cnt = 0;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      s.insert(st1[i] * 100 + st2[j]);
    }
  }
  cout << s.size() << endl;
  for (int i = 1; i <= 2 * n; ++i) {
    if (i - 1) putchar(' ');
    write(belong[i]);
  }
  return 0;
}
