#include #include #include using namespace std; #define N (2*105) int w,h,n,g[N][N]; int dirs[]={1,0,0,1,-1,0,0,-1}; void dump() { for (int y=0;y<8;++y) { for (int x=0;x<8;++x) putchar(g[x][y]?'*':' '); puts(""); } } int main() { while(scanf("%d%d%d",&w,&h,&n),w|h|n) { memset(g,0,sizeof(g)); for (int i=0;ix2) swap(x1,x2); if (y1>y2) swap(y1,y2); if (y1==y2) { for (int x=2*x1;x<=2*x2;++x) g[x][2*y1]=1; } else if (x1==x2) { for (int y=2*y1;y<=2*y2;++y) g[2*x1][y]=1; } } for (int x=0;x<=2*w;++x) g[x][0]=g[x][2*h]=1; for (int y=0;y<=2*h;++y) g[0][y]=g[2*w][y]=1; int x,y,dir,gx,gy; { int x1,y1,x2,y2; scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&gx,&gy); if (x1>x2) swap(x1,x2); if (y1>y2) swap(y1,y2); if (y1==y2) { if (y1==0) { x=2*x1+1,y=0,dir=1; } else { x=2*x1+1,y=2*h,dir=3; } } else { if (x1==0) { x=0,y=2*y1+1,dir=0; } else { x=2*w,y=2*y1+1,dir=2; } } g[x][y]=0; } // dump(); int ans=-1; int step=1; while(1) { if (x==2*gx+1&&y==2*gy+1) { ans=step; break; } for (int i=0;i<4;++i) { int ndir=(dir+1-i+4)%4; int nx=x+dirs[2*ndir],ny=y+dirs[2*ndir+1]; if (nx<0||nx>2*w||ny<0||ny>2*h) goto done; if (g[nx][ny]) continue; x=nx; y=ny; dir=ndir; break; } ++step; } done:; if (ans==-1) puts("Impossible"); else printf("%d\n",ans/2); } }