/*
刘汝佳的四个神题之一, 就是一个bfs+hash判重的最短路问题。
*/
#include<cstdio>
#include<cstring>#include<cstdlib>
int a[10],prim[110];
int head[1001000],next[1001000];
struct S
{
int step;
int s[10];
} q[1001000];
int judge(int x)
{
for(int i = 1; i <= 8; i++)
{
if(abs(q[x].s[i-1])!=i)
return 0;
}
return 1;
}
int hash(int x)
{
int temp=0;
for(int i = 0; i < 8; i++)
temp = temp*10+abs(q[x].s[i]);
return temp % 1000003;
}
int insert(int s)
{
int h = hash(s);
//printf("%d..\n",h);
for(int v = head[h]; v != -1; v=next[v])
{
if(memcmp(q[s].s,q[v].s,sizeof(q[s].s))==0)
return 0;
}
next[s] = head[h];
head[h] = s;
return 1;
}
int solve1(int x,int y,int *p)
{
int t1 = p[x];
// -zuo
if(x > y)
{
for(int i = x-1; i >= y; i--)
p[i+1]=p[i];
p[y] = t1;
}
else
{
for(int i = x; i < y-1; i++)
p[i] = p[i+1];
p[y-1] = t1;
}
}
int solve2(int x,int y,int *p)
{
int t1 = p[x];
// -you
if(x < y)
{
for(int i = x; i < y; i++)
p[i]=p[i+1];
p[y] = t1;
}
else
{
for(int i = x-1; i > y; i--)
p[i+1] = p[i];
p[y+1] = t1;
}
}
int bfs()
{
memset(q,0,sizeof(q));
memset(head,-1,sizeof(head));
int front=0,rear=1;
q[0].step=0;
for(int i = 0; i < 8; i++)
q[0].s[i] = a[i];
insert(0);
while(front<rear)
{
if(judge(front))
{
printf("%d\n",q[front].step);
return 0;
}
for(int i = 0; i < 8; i++)
for(int j = 0; j < 8; j++)
{
if(((q[front].s[i]<0&&q[front].s[j]>0)||(q[front].s[i]>0&&q[front].s[j]<0))&&!prim[abs(q[front].s[j])+abs(q[front].s[i])])
{
memcpy(q[rear].s,q[front].s,sizeof(q[front].s));
solve1(i,j,q[rear].s);
q[rear].step = q[front].step+1;
if(insert(rear))
rear++;
memcpy(q[rear].s,q[front].s,sizeof(q[front].s));
solve2(i,j,q[rear].s);
q[rear].step = q[front].step+1;
if(insert(rear))
rear++;
}
}
front++;
}
printf("-1\n");
}
int main()
{
for(int i = 2; i < 9; i++)
for(int j = i; j < 9; j++)
prim[i*j] = 1;
int n = 8,count=0;
while(scanf("%d",&a[0]),a[0])
{
for(int i = 1; i < 8; i++)
scanf("%d",&a[i]);
printf("Case %d: ",++count);
bfs();
}
return 0;
}