/*
解题思路:
此题略坑、有好多陷阱。
第一个是、一旦确定搜索方向,该条路径方向不可改变(所以不可以用BFS或者DFS遍历搜索)
第二个是、多组案例除最后一组外每组案例结尾有一个空行(这里错了超久、一直忽略)
题意:
找出最上最左边的输入单词首字母的横纵坐标位置、该位置可以有一条路径把输入的字符串全部找到
*/
#include <stdio.h>
#include <string.h>
#define A 60
#define B 10
int m,n;
int flag,len;
char map[ A ][ A ];
char match[ A ];
int dx[ B ] = { 1 , -1 , 0 , 0 , 1 , 1 , -1 , -1 };
int dy[ B ] = { 0 , 0 , 1 , -1 , 1 , -1 , 1 , -1 };
int queueX[ A ];
int queueY[ A ];
int p,q;
void search( int xx , int yy ,int k)
{
char c1 = match[ q ] , c2;
if( c1<='Z' && c1>='A' )
c2 = (char)(c1-'A'+'a');
else
c2 = (char)(c1-'a'+'A');
if( q == len )
{
flag = 1;
return ;
}
if( xx+dx[k] < m && yy+dy[k] < n && xx+dx[k] >=0 && yy+dy[k] >=0 && ( map[ xx+dx[k] ][ yy+dy[k] ] == c1 || map[ xx+dx[k] ][ yy+dy[k] ] == c2 ) )
{
q++;
queueX[ p++ ] = xx+dx[k];
queueY[ p++ ] = yy +dy[k];
search( xx+dx[k] , yy+dy[k] , k );
if( flag ) return;
q--;
p--;
}
}
int main( )
{
int t;
int i,j,k,l,o;
char c1,c2;
scanf("%d",&t);
while( t-- )
{
scanf("%d%d",&m,&n);
for( i=0;i<m;i++ )
scanf("%s",&map[ i ] );
scanf("%d",&k);
for( i=0;i<k;i++ )
{
flag = p = q = 0;
scanf("%s",match );
len = strlen( match );
for( j=0;j<m;j++ )
{
for( l=0;l<n;l++ )
{
c1 = match[ q ];
if( c1<='Z' && c1>='A' )
c2 = (char)(c1-'A'+'a');
else
c2 = (char)(c1-'a'+'A');
if( map[ j ][ l ] == c1 || map[ j ][ l ] == c2 )
{
queueX[ 0 ] = j;
queueY[ 0 ] = l;
q++;
for(o=0;o<8;o++ )
search( j , l , o );
if( flag ) break;
q--;
}
}
if( flag ) break;
}
printf("%d %d\n",j+1,l+1);
}
if( t!=0 )
puts("");
}
return 0;
}