//迭代加深法, 可以解决一些看起来更适合用BFS和回溯法的题,但是BFS和回溯法浪费空间,所以迭代加深法更能解决问题。。。
//追加一点, 迭代加深并不难懂, 但是主要是找出里面内含的评估函数。。
#include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
int n, h;
int maxd;
int solve(int *tmp, int d)
{
h = 0;
for(int i = 0 ; i < n-1; i++)
if(tmp[i] != (tmp[i + 1] - 1))
h++;
if(tmp[n-1] != n) h++;
if(h==0) return true;
if(3*d+h>3*maxd) return false;
for(int i = 0 ; i < n; i++)
{
for(int j = i ; j < n ; j++)
{
for(int k = 0 ; k < i ; k++)
{
int tmp1[10];
int cnt = 0;
for(int kk = 0 ; kk < k; kk++)
tmp1[cnt++] = tmp[kk];
for(int kk = i; kk <= j ; kk++)
tmp1[cnt++] = tmp[kk];
for(int kk = k ; kk < i ; kk++)
tmp1[cnt++] = tmp[kk];
for(int kk = j + 1; kk < n ; kk++)
tmp1[cnt++] = tmp[kk];
if(solve(tmp1,d+1)) return true;
}
}
}
}
int main()
{
int kase = 0;
while(scanf("%d", &n) == 1 && n)
{
int page[10];
memset(page,0,sizeof(page));
for(int i = 0; i < n; ++i)scanf("%d", &page[i]);
for(maxd = 0; ; ++maxd)
{
int tmp[10];
memcpy(tmp,page,sizeof(tmp));
if(solve(page,0)) break;
}
printf("Case %d: %d\n", ++kase,maxd);
}
return 0;
}