//UVA11212EditingABook
#include<cstdio>
#include<cstdlib>
#include<cstring>
const int MAXN = 10 + 5;
int n;
int a[MAXN];
int maxd;
bool is_sorted() {
for(int i = 0; i < n - 1; i++) if(a[i + 1] <= a[i]) return false;
return true;
}
int h() {
int cnt = 0;
for(int i = 0; i < n - 1; i++) if(a[i] + 1 != a[i + 1]) cnt++;
if(a[n - 1] != n) cnt++;
return cnt;//???
}
int dfs(int d) {
if(3 * d + h() > 3 * maxd) return false;
if(is_sorted()) return true;
//特判无须完成的情况
int b[MAXN] = {0}, olda[MAXN] = {0};
memcpy(olda, a, sizeof(a));
for(int i = 0; i < n; i++) {
for(int j = i; j < n; j++) {
int cnt = 0;
for(int k = 0; k < n; k++)
if(k < i || k > j) b[cnt++] = a[k];//保存未改变的数据
//cnt为此数据的长度
for(int k = 0; k <= cnt; k++) {//遍历插入数据的任何有效位置
int cnt2 = 0;
for(int p = 0; p < k; p++) a[cnt2++] = b[p];
for(int p = i; p <= j; p++) a[cnt2++] = olda[p];
for(int p = k; p < cnt; p++) a[cnt2++] = b[p];
if(dfs(d + 1)) return true;
memcpy(a, olda, sizeof(a));
}
}
}
return false;
}
int solve() {
if(is_sorted()) return 0;
for(maxd = 1; ; maxd++) {
if(dfs(0)) return maxd;
}
}
int main() {
int kase = 0;
//freopen("UVA11212out.txt", "w", stdout);
while(scanf("%d", &n) == 1 && n) {
memset(a, 0, sizeof(a));
for(int i = 0; i < n; i++) scanf("%d", &a[i]);
printf("Case %d: ", ++kase);
printf("%d\n", solve());
}
return 0;
}
/*
6
2 4 1 5 3 6
5
3 4 5 1 2
0
*/