#include #include #include #include #include using namespace std; const int MAXN = 100 + 5; const int MAXANS = MAXN * MAXN * MAXN; int ans[MAXANS], ansN; int a[MAXN]; int n; bool u[MAXN], tag[MAXN]; void makeSwapWay (int offset, int from, int dest) { if (from < dest) { while (from < dest) { swap(a[from], a[from + 1]); ans[++ansN] = offset + from++; } } else { while (dest < from) { swap(a[from], a[from - 1]); ans[++ansN] = offset + --from; } } } void solve (int offset) { for(int i = 1; i <= n; i++) { assert(a[i] != i); } for(int i = n; i; i--) { int pos; for(int j = 1; j <= n; j++) if (a[j] == i) { pos = j; break; } if (a[pos] == pos) { continue; } while (a[pos] != pos) { int posB; bool fail = false; for(int j = pos + 1; j <= i; j++) if (a[j] != j - 1) { fail = true; posB = j; break; } if (!fail) { makeSwapWay(offset, pos, i); break; } else { makeSwapWay(offset, posB, pos); ++pos; } } } } int main(int argc, const char * argv[]) { int tn; cin >> tn; assert(1 <= tn && tn <= 50); while (tn--) { cin >> n; assert(1 <= n && n <= 50); for(int i = 1; i <= n; i++) { u[i] = false; } for(int i = 1; i <= n; i++) { cin >> a[i]; assert(1 <= a[i] && a[i] <= n); assert(!u[a[i]]); u[a[i]] = true; } int invCnt = 0; for(int i = 1; i <= n; i++) { for(int j = i + 1; j <= n; j++) { if (a[i] > a[j]) { ++invCnt; } } } for(int i = 1; i <= n; i++) { tag[i] = false; } ansN = 0; solve(0); cout << ansN << endl; for(int i = 1; i < ansN; i++) { cout << ans[i] << " "; } cout << ans[ansN] << endl; } return 0; }