/*
分析:
分治。
分治依旧那么犀利。Cal(a,b)(a<=b)表示把a到b排列好,并放
在b的初始位置,所需要移动的最小格数。
2013-03-20
*/
分析:
分治。
分治依旧那么犀利。Cal(a,b)(a<=b)表示把a到b排列好,并放
在b的初始位置,所需要移动的最小格数。
2013-03-20
*/
#include"iostream"
#include"cmath"
using namespace std;
const int N=11;
int dis[N][N];
int Cal(int a,int b)
{
if(abs(a-b)<=1) return dis[a][b];
int i,temp,min=111111;
for(i=a;i<b;i++)
{
temp=Cal(a,i)+Cal(i+1,b)+dis[i][b];
if(temp<min) min=temp;
}
return min;
}
int main()
{
int T;
int i,l;
int pos[N];
scanf("%d",&T);
while(T--)
{
int temp;
for(i=1;i<=10;i++) {scanf("%d",&temp);pos[temp]=i;}
for(i=1;i<=10;i++)
for(l=1;l<=10;l++)
dis[i][l]=abs(pos[i]-pos[l]);
printf("%d\n",Cal(1,10));
}
return 0;
}