#include #include #include #include #include using namespace std; const int N = 505; const int M = 250050; bool map[N][N]; int biao[N][N]; int fa[M]; int cc; int n,m,p; int s,t; int ans; int getint() { int res=0; char ch=getchar(); while((ch<'0' || ch>'9') && ch!='-') ch=getchar(); bool fan=0; if(ch=='-') { fan=1; ch=getchar(); } while('0'<=ch && ch<='9') { res=res*10+ch-'0'; ch=getchar(); } if(fan) res=-res; return res; } int getnum() { int res=0; char ch=getchar(); while((ch<'0' || ch>'9') && ch!='-') ch=getchar(); return (ch-'0'); } int Getf(int x) { if(fa[x]!=x) fa[x]=Getf(fa[x]); return fa[x]; } void Link(int x,int y) { x=Getf(x); y=Getf(y); fa[x]=y; } void Add(int x,int y,int z) { int i,j; for(i=x-1;i<=x+1;i++) { for(j=y-1;j<=y+1;j++) { if(i<1 || i>n) continue; if(j==0) Link(s,biao[x][y]); if(j==m+1) Link(t,biao[x][y]); if(map[i][j]) Link(biao[i][j],biao[x][y]); } } if(Getf(s)==Getf(t)) ans=min(ans,z); } int f() { int i,j; n=getint(); m=getint(); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) map[i][j]=getnum(); } p=getint(); ans=p+1; cc=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cc++; biao[i][j]=cc; fa[cc]=cc; } } cc++; s=cc; fa[s]=s; cc++; t=cc; fa[t]=t; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(map[i][j]) Add(i,j,0); } } for(i=1;i<=p;i++) { int a=getint()+1; int b=getint()+1; if(!map[a][b]) { map[a][b]=1; Add(a,b,i); } } if(ans==p+1) ans=-1; return ans; } int main() { int t=getint(); while(t--) printf("%d\n",f()); return 0; }