#include <bits/stdc++.h>
using namespace std;
template <typename T>
struct compF {
  bool operator()(const pair<T, T> &a, const pair<T, T> &b) {
    return a.first < b.first;
  }
};
template <typename T>
struct compS {
  bool operator()(const pair<T, T> &a, const pair<T, T> &b) {
    return a.second < b.second;
  }
};
template <typename T>
void printMatrix(const string &txt, vector<vector<T>> &a) {
  cout << txt;
  for (int i = 0; i < a.size(); ++i) {
    for (int j = 0; j < a[i].size(); ++j) cout << a[i][j] << ' ';
    cout << endl;
  }
}
template <typename T>
void printVector(const string &txt, vector<T> &a) {
  cout << txt;
  for (int i = 0; i < a.size(); ++i) cout << a[i] << ' ';
  cout << endl;
}
template <typename T>
void readVector(int n, vector<T> &a) {
  if (a.size() < n) a.resize(n);
  for (int i = 0; i < n; ++i) cin >> a[i];
}
template <typename T1, typename T2>
bool exist(map<T1, T2> &m, T1 x) {
  if (m.find(x) == m.end()) return false;
  return true;
}
long long gcd(long long a, long long b) {
  while (a != 0 && b != 0) {
    if (b > a)
      b %= a;
    else
      a %= b;
  }
  return a + b;
}
long long minFactor(long long x) {
  for (long long i = 2; i * i <= x; ++i)
    if (x % i == 0) return i;
  return x;
}
long long allFactors(long long x, vector<long long> &prms,
                     vector<long long> &prm_cnt) {
  prms.clear();
  prm_cnt.clear();
  while (x > 1) {
    long long t = minFactor(x);
    prms.push_back(t);
    int s = prms.size() - 1;
    prm_cnt.push_back(0);
    while (x % t == 0) {
      x /= t;
      ++prm_cnt[s];
    }
  }
  return 0;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie();
  int q;
  cin >> q;
  while (q--) {
    int n;
    cin >> n;
    vector<int> t(n);
    set<int> nums;
    for (int i = 0; i < n; ++i) {
      cin >> t[i];
      nums.insert(t[i]);
    }
    if (nums.size() == 1) {
      cout << 1 << endl;
      for (int i = 0; i < n; ++i) cout << 1 << ' ';
      cout << endl;
    } else if (nums.size() == 2) {
      vector<int> ans(n, 0);
      for (int i = 1; i < n; ++i) {
        if (t[i] != t[i - 1]) {
          ans[i] = ans[i - 1] ^ 1;
        } else
          ans[i] = ans[i - 1];
      }
      cout << 2 << endl;
      for (int i = 0; i < n; ++i) cout << ans[i] + 1 << ' ';
      cout << endl;
    } else {
      int seq = -1;
      int last_seq = 0;
      if (t[n - 1] == t[n - 2]) last_seq = 1;
      vector<int> ans(n, 0);
      for (int i = 1; i < n; ++i) {
        if (t[i] != t[i - 1]) {
          ans[i] = ans[i - 1] ^ 1;
        } else
          ans[i] = ans[i - 1];
      }
      int cnt = 2;
      if (!last_seq) {
        int i = 0;
        bool was = false;
        while (i < n - 1) {
          if (t[i] == t[i + 1]) {
            if (!was) {
              seq = i;
              was = true;
            }
          } else if (was)
            was = false;
          ++i;
        }
        if (t[n - 1] != t[0] && ans[n - 1] == ans[0]) {
          if (seq == -1) {
            ++cnt;
            ans[n - 1] = 2;
          } else {
            int ind = seq + 1;
            for (int i = ind; i < n; ++i) ans[i] ^= 1;
          }
        }
      } else {
        if (t[n - 1] != t[0] && ans[n - 1] == ans[0]) ans[n - 1] ^= 1;
      }
      cout << cnt << endl;
      for (int i = 0; i < n; ++i) cout << ans[i] + 1 << ' ';
      cout << endl;
    }
  }
  return 0;
}
