#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
using namespace std;
int ans_flag = 0,n,case_num;
int book_shell[20];
//H函数为某一个值后继值错位的个数:1的后继值为2,如果1的后继值不为2,则表示错位。进行一次交换只能改变三个值的后继值,i-1,j,k
int H(int book[])
{
int sum = 0;
for(int i = 0;i<n-1;i++)
{
if(book[i+1] != book[i]+1)
sum++;
}
if(book[n-1] != n)
sum++;
return ceil(((double)sum/3));
}
//书籍交换 把[i,j]的书 和 [j+1,k]的书交换
void Book_swap(int book[],int s,int m,int e)
{
int tmp[20],tmp_index = s;
for(int i = m+1;i<=e;i++,tmp_index++)
tmp[tmp_index] = book[i];
for(int i = s;i<= m;i++,tmp_index++)
tmp[tmp_index] = book[i];
for(int i = s;i<=e;i++)
book[i] = tmp[i];
}
void dfs(int step,int maxdp,int book[])
{
int h = H(book);
if(h + step > maxdp || ans_flag == 1)return ;
if(h == 0){
printf("%d\n",step);
ans_flag = 1;
return ;
}
for(int i = 0;i<n-1;i++)
{
for(int j= i;j<n-1;j++)
{
for(int k = j+1;k<n;k++)
{
if(book[j]+1 == book[j+1])continue; //三个剪枝,从110ms到47ms
if(i>0&&book[i-1]+1 == book[i])continue;
if(k<n-1&&book[k]+1 == book[k+1])continue;
Book_swap(book,i,j,k);
dfs(step+1,maxdp,book);
if(ans_flag)return ;
Book_swap(book,i,i + k - j - 1,k); //恢复原来的
}
}
}
}
void IDA()
{
int maxdp = 1;
ans_flag = 0;
while(1)
{
dfs(0,maxdp,book_shell);
if(ans_flag)break;
maxdp++;
if(maxdp > 4)
{
printf("5 or more\n");
break;
}
}
}
int main()
{
scanf("%d",&case_num);
while(case_num--)
{
scanf("%d",&n);
for(int i = 0;i<n;i++)
{
scanf("%d",&book_shell[i]);
}
IDA();
}
return 0;
}