#include <bits/stdc++.h>
using namespace std;
using lld = long long;
using pi = pair<int, int>;
using pl = pair<lld, lld>;
using vi = vector<int>;
using vvi = vector<vector<int>>;
using vb = vector<bool>;
using vc = vector<char>;
using vl = vector<lld>;
using vp = vector<pi>;
using vs = vector<string>;
using si = stack<int>;
using qi = queue<int>;
using qp = queue<pi>;
using pqi = priority_queue<int>;
const lld mod = 998244353;
int n, mx;
vi t, c, adj;
vb chk;
void input() {
  t.clear();
  c.clear();
  adj.clear();
  chk.clear();
  cin >> n;
  t = vi(n);
  c = vi(n);
  adj = vi(n, -1);
  chk = vb(n);
  for (int i = 0; i < n; ++i) cin >> t[i];
}
void go(int cur) {
  chk[cur] = true;
  int nxt = adj[cur];
  if (nxt == -1) return;
  if (c[nxt]) {
    c[cur] = c[nxt] == 1 ? 2 : 1;
    return;
  }
  c[nxt] = c[cur] == 1 ? 2 : 1;
  int t = c[nxt];
  go(nxt);
  if (t != c[nxt]) {
    c[cur] = c[nxt] == 1 ? 2 : 1;
  }
}
void solve() {
  for (int i = 0; i < n; ++i)
    if (t[i] != t[(i + 1) % n]) adj[i] = (i + 1) % n;
  int cnt = 0;
  for (int i = 0; i < n; ++i) {
    if (chk[i]) continue;
    c[i] = 1;
    go(i);
    cnt++;
  }
  if (cnt == 1)
    if (t[n - 1] != t[0] && c[n - 1] == c[0]) c[n - 1] = 3;
  int mx = 1;
  for (int i = 0; i < n; ++i) mx = max(mx, c[i]);
  cout << mx << '\n';
  for (int i = 0; i < n; ++i) cout << c[i] << ' ';
  cout << '\n';
}
int main() {
  cin.tie(nullptr);
  ios_base::sync_with_stdio(false);
  int tc;
  cin >> tc;
  while (tc--) {
    input();
    solve();
  }
}
