#include #include #include #include #include #include using namespace std; const int maxn=1015; int n,m; int pkn[2][maxn][maxn],pki[2][maxn][maxn]; int qx[maxn*maxn*2],qy[maxn*maxn*2],qp[maxn*maxn*2],qf,qr; int tn; void test(int pp[][maxn][maxn],int p,int x,int y,int v){ if(x<1||y<1||x>n||y>m)return; if(!~pp[p][x][y]){ ++tn; pp[p][x][y]=v; qx[qr]=x; qy[qr]=y; qp[qr++]=p; } } void dit(int i){ printf("Case #%d:\n",i); int k,xkn,ykn,xki,yki;tn=0; memset(pkn,-1,sizeof(pkn)); memset(pki,-1,sizeof(pki)); scanf("%d%d%d%d%d%d%d",&n,&m,&k,&xki,&yki,&xkn,&ykn); qf=qr=0; qp[qr]=0;qx[qr]=xkn;qy[qr++]=ykn; pkn[0][xkn][ykn]=0; while(qf!=qr){ int x=qx[qf],y=qy[qf],p=qp[qf];++qf; test(pkn,!p,x+2,y+1,pkn[p][x][y]+1); test(pkn,!p,x-2,y+1,pkn[p][x][y]+1); test(pkn,!p,x+2,y-1,pkn[p][x][y]+1); test(pkn,!p,x-2,y-1,pkn[p][x][y]+1); test(pkn,!p,x+1,y+2,pkn[p][x][y]+1); test(pkn,!p,x-1,y+2,pkn[p][x][y]+1); test(pkn,!p,x+1,y-2,pkn[p][x][y]+1); test(pkn,!p,x-1,y-2,pkn[p][x][y]+1); } if(!tn){printf("OH,NO!\n");return;} qf=qr=0; qp[qr]=0;qx[qr]=xki;qy[qr++]=yki; pki[0][xki][yki]=0; while(qf!=qr){ int x=qx[qf],y=qy[qf],p=qp[qf];++qf; test(pki,!p,x+1,y+1,pki[p][x][y]+1); test(pki,!p,x-1,y+1,pki[p][x][y]+1); test(pki,!p,x+1,y-1,pki[p][x][y]+1); test(pki,!p,x-1,y-1,pki[p][x][y]+1); test(pki,!p,x+1,y,pki[p][x][y]+1); test(pki,!p,x-1,y,pki[p][x][y]+1); test(pki,!p,x,y+1,pki[p][x][y]+1); test(pki,!p,x,y-1,pki[p][x][y]+1); } if(!tn){printf("OH,NO!\n");return;} int ans=INT_MAX; for(int p=0;p<=1;++p) for(int i=1;i<=n;++i) for(int j=1;j<=m;++j){ if((~pkn[p][i][j])&&(~pki[p][i][j])) ans=min(ans,max(pkn[p][i][j],pki[p][i][j])); } if(ans>k){printf("OH,NO!\n");return;} printf("%d\n",ans); } int main() { int T;scanf("%d",&T);for(int i=1;i<=T;++i)dit(i); }