1. #include<iostream>
  2. #include<queue>
  3. #include<cstdio>
  4. #define M 1005
  5. using namespace std;
  6.  
  7. int color[M][M],D[M][M];
  8.  
  9. int main()
  10. {
  11. queue<int>Q;
  12. int r,c,rn,cn,x,y,i,j,sx,sy,dx,dy,tx,ty;
  13. freopen("in.txt","r",stdin);
  14.  
  15. while(scanf("%d%d",&r,&c)&&(r|c))
  16. {
  17. for(i=0;i<r;i++)
  18. for(j=0;j<c;j++)
  19. color[i][j]=0;
  20.  
  21. scanf("%d",&rn);
  22. for(i=0;i<rn;i++)
  23. {
  24. scanf("%d%d",&x,&cn);
  25. for(j=0;j<cn;j++)
  26. {
  27. scanf("%d",&y);
  28. color[x][y]=1;
  29. }
  30. }
  31.  
  32. scanf("%d%d%d%d",&sx,&sy,&dx,&dy);
  33.  
  34. color[sx][sy]=1,D[sx][sy]=0;
  35. Q.push(sx);
  36. Q.push(sy);
  37.  
  38. while(!Q.empty())
  39. {
  40. x=Q.front();Q.pop();
  41. y=Q.front(),Q.pop();
  42.  
  43. //Check Backward
  44. if(x>0)
  45. {
  46. tx=x-1;
  47. ty=y;
  48.  
  49. if(!color[tx][ty])
  50. {
  51. D[tx][ty]=D[x][y]+1;
  52. if(tx==dx && ty==dy)break;
  53. Q.push(tx);Q.push(ty);
  54. color[tx][ty]=1;
  55. }
  56.  
  57. }
  58.  
  59. //Check Forward
  60. if(x<c)
  61. {
  62. tx=x+1;
  63. ty=y;
  64.  
  65. if(!color[tx][ty])
  66. {
  67. D[tx][ty]=D[x][y]+1;
  68. if(tx==dx && ty==dy)break;
  69. Q.push(tx);Q.push(ty);
  70. color[tx][ty]=1;
  71. }
  72. }
  73.  
  74. //Check Upward
  75. if(y>0)
  76. {
  77. tx=x;
  78. ty=y-1;
  79.  
  80. if(!color[tx][ty])
  81. {
  82. D[tx][ty]=D[x][y]+1;
  83. if(tx==dx && ty==dy)break;
  84. Q.push(tx);Q.push(ty);
  85. color[tx][ty]=1;
  86. }
  87. }
  88.  
  89.  
  90. //Check Downward
  91. if(y<r)
  92. {
  93. tx=x;
  94. ty=y+1;
  95.  
  96. if(!color[tx][ty])
  97. {
  98. D[tx][ty]=D[x][y]+1;
  99. if(tx==dx && ty==dy)break;
  100. Q.push(tx);Q.push(ty);
  101. color[tx][ty]=1;
  102. }
  103. }
  104. color[x][y]=2;
  105. }
  106. while(!Q.empty())
  107. Q.pop();
  108. printf("%d\n",D[dx][dy]);
  109. }
  110. return 0;
  111. }