//#include #include //------------------------------------------------------------ int tcase; int icase; int S,T; int n,m,q; int i,j,k; int sx[500000]; int sy[500000]; int far[1000000]; int num[510][510]; int tab[510][510]; int fa,fb; //------------------------------------------------------------ int getf(int d) { return far[d]==d ? d : far[d]=getf(far[d]); } //------------------------------------------------------------ void link(int a,int b) { //--0 init int fa,fb; //--1 link if (a-1>=1&&!tab[a-1][b]) { fa=getf(num[a-1][b]); fb=getf(num[a][b]); if (fa!=fb) far[fa]=fb; } if (a+1<=n&&!tab[a+1][b]) { fa=getf(num[a+1][b]); fb=getf(num[a][b]); if (fa!=fb) far[fa]=fb; } if (b-1>=1&&!tab[a][b-1]) { fa=getf(num[a][b-1]); fb=getf(num[a][b]); if (fa!=fb) far[fa]=fb; } if (b+1<=m&&!tab[a][b+1]) { fa=getf(num[a][b+1]); fb=getf(num[a][b]); if (fa!=fb) far[fa]=fb; } } //------------------------------------------------------------ int main( ) { for (scanf("%d",&tcase); ++icase<=tcase; ) { //--0 init scanf("%d%d",&n,&m); far[S=0]=0; far[T=n*m+1]=n*m+1; for (i=1; i<=n; i++) for (j=1; j<=m; j++) num[i][j]=m*(i-1)+j; for (i=1; i<=n; i++) for (j=1; j<=m; j++) far[num[i][j]]=num[i][j]; //--1 for (i=1; i<=n; i++) { scanf("\n"); for (j=1; j<=m; j++) tab[i][j]=getchar()-'0'; } //--2 scanf("%d",&q); for (i=1; i<=q; i++) { scanf("%d%d",&sx[i],&sy[i]); tab[++sx[i]][++sy[i]]++; } //--3 link for (i=1; i<=n; i++) for (j=1; j<=m; j++) if (!tab[i][j]) link(i,j); for (i=1; i<=m; i++) { fa=getf(num[1][i]); fb=getf(S); if (fa!=fb) far[fa]=fb; fa=getf(num[n][i]); fb=getf(T); if (fa!=fb) far[fa]=fb; } //--4 work fa=getf(S); fb=getf(T); if (fa==fb) printf("-1\n"); else { for (i=q; i>=1; i--) { if (!--tab[sx[i]][sy[i]]) link(sx[i],sy[i]); //=2 update fa=getf(S); fb=getf(T); if (fa==fb) break; } printf("%d\n",i); } } }