#include #include #include #include using namespace std; #define RI(x) scanf("%d",&(x)) #define RII(x,y) scanf("%d %d",&(x),&(y)) #define RI64(x) scanf("%I64d",&(x)) #define RII64(x,y) scanf("%I64d%I64d",&(x),&(y)) #define FZ(i,n) for(int i=0;i<(n);i++) #define PA(a,n) FZ(_1,n)printf("%d%c",(a)[_1],_1==(n)-1?10:32) #define ePA(a,n) FZ(_2,n)fprintf(stderr,"%d%c",(a)[_2],_2==(n)-1?10:32) #define SZ(x) ((int)x.size()) #define ALL(x) (x).begin(),(x).end() #define pritnf printf #define N 1024 using namespace std; typedef long long int lnt; typedef double dou; int n,m,k; int dx1[10]={2,1,-1,-2,-2,-1, 1, 2}; int dy1[10]={1,2, 2, 1,-1,-2,-2,-1}; int dx2[10]={+1,+1,-0,-1,-1,-1,+0,+1}; int dy2[10]={+0,+1,+1,+1,-0,-1,-1,-1}; int dis[N][N]; typedef pair P; void sol(int uuu){ RII(n,m);RI(k); int sx,sy,ex,ey; RII(ex,ey);RII(sx,sy); --sx;--sy;--ex;--ey; printf("Case #%d:\n",uuu); FZ(i,n)FZ(j,m)dis[i][j]=1<<30; dis[sx][sy]=0; queue

q; q.push(P(sx,sy)); for(;SZ(q);){ P w=q.front();q.pop(); FZ(i,8){ int nx=w.first +dx1[i]; int ny=w.second+dy1[i]; if(0<=nx&&nxdis[w.first][w.second]+1){ dis[nx][ny]=dis[w.first][w.second]+1; q.push(P(nx,ny)); } } } int mn=1<<30; FZ(i,n)FZ(j,m){ //printf("%d%c",dis[i][j],j==m-1?10:32); int d2=max(abs(i-ex),abs(j-ey)); if((d2-dis[i][j])%2==0){ mn=min(mn,max(d2,dis[i][j])); } else if(d2>dis[i][j]){ mn=min(mn,d2+3); } else{ mn=min(mn,dis[i][j]+2); } } printf(mn<=k?"%d\n":"OH,NO!\n",mn); } int main(){ //while(RI(n)!=EOF)sol(); int t; if(RI(t)!=EOF){ for(int ti=1;ti<=t;ti++)sol(ti); } return 0; }