#include <bits/stdc++.h>
const long long MOD = 1000000007;
using namespace std;
int a[3000], b[3000], g[3000], dp[210][101][101][2][2], n, ans;
int solve(int i, int j, int k, int f1, int f2) {
  if (i > 2 * n) {
    if (j == 0 && k == 0)
      return 0;
    else
      return -100000;
  }
  if (j < 0) return -100000;
  if (k < 0) return -100000;
  if (dp[i][j][k][f1][f2] != -1) return dp[i][j][k][f1][f2];
  int k1 = 1, k2 = 1;
  if (f1) k1 = 0;
  if (f2) k2 = 0;
  dp[i][j][k][f1][f2] = max(
      solve(i + 1, j - 1, k - k1, a[i] == a[i + 1], f2 & (a[i] == a[i + 1])),
      solve(i + 1, j, k, f1 & (a[i] == a[i + 1]), a[i] == a[i + 1]) + k2);
  return dp[i][j][k][f1][f2];
}
void solve1(int i, int j, int k, int f1, int f2) {
  if (i > 2 * n) return;
  int k1 = 1, k2 = 1;
  if (f1) k1 = 0;
  if (f2) k2 = 0;
  if (dp[i][j][k][f1][f2] ==
      dp[i + 1][j - 1][k - k1][a[i] == a[i + 1]][f2 & (a[i] == a[i + 1])]) {
    b[g[i]] = 1;
    solve1(i + 1, j - 1, k - k1, a[i] == a[i + 1], f2 & (a[i] == a[i + 1]));
  } else {
    b[g[i]] = 2;
    solve1(i + 1, j, k, f1 & (a[i] == a[i + 1]), a[i] == a[i + 1]);
  }
}
int main() {
  cin >> n;
  for (int i = 1; i <= 2 * n; i++) cin >> a[i];
  for (int i = 1; i <= 2 * n; i++) g[i] = i;
  for (int i = 1; i <= 2 * n - 1; i++)
    for (int j = i + 1; j <= 2 * n; j++)
      if (a[i] > a[j]) {
        swap(a[i], a[j]);
        swap(g[i], g[j]);
      }
  memset(dp, -1, sizeof(dp));
  for (int i = 0; i <= n; i++) solve(1, n, i, 0, 0);
  ans = 0;
  for (int i = 0; i <= n; i++) ans = max(ans, i * dp[1][n][i][0][0]);
  cout << ans << endl;
  for (int i = 0; i <= n; i++)
    if (ans == i * dp[1][n][i][0][0]) {
      solve1(1, n, i, 0, 0);
      break;
    }
  for (int i = 1; i <= 2 * n; i++) cout << b[i] << " ";
  return 0;
}
