#include #include #include #include #include using namespace std; #define NMAX 100001 #define VMAX 100001 int N, A[NMAX], B[NMAX], cnt[VMAX]; void ReadInput() { scanf("%d", &N); assert(1 <= N && N <= 100000); for (int i = 1; i <= N; ++i) { scanf("%d", &A[i]); assert(1 <= A[i] && A[i] <= 100000); } } vector> v; int dbest, offbest; void Solve() { memset(cnt, 0, sizeof(cnt)); v.resize(N); for (int i = 1; i <= N; ++i) { ++cnt[A[i]]; v[i - 1].first = A[i]; v[i - 1].second = i; } sort(v.begin(), v.end()); for (int i = 1; i < VMAX; ++i) assert(cnt[i] <= 2); dbest = offbest = 0; for (int offset = 1; offset <= 10 && offset <= N; ++offset) { for (int i = 0; i < N; ++i) B[v[i].second] = v[(i + offset) % N].first; int d = 0; for (int i = 1; i <= N; ++i) if (A[i] != B[i]) ++d; if (d > dbest) { dbest = d; offbest = offset; } } for (int i = 0; i < N; ++i) B[v[i].second] = v[(i + offbest) % N].first; } int main() { int T; scanf("%d", &T); assert(1 <= T && T <= 10); while (T--) { ReadInput(); Solve(); printf("%d\n", dbest); for (int i = 1; i <= N; ++i) { printf("%d", B[i]); if (i < N) printf(" "); } printf("\n"); } return 0; }