#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
inline int my_getchar_unlocked(){
static char buf[1048576];
static int s = 1048576;
static int e = 1048576;
if(s == e && e == 1048576){
e = fread_unlocked(buf, 1, 1048576, stdin);
s = 0;
}
if(s == e){
return EOF;
}
return buf[s++];
}
inline void rd(int &x){
int k;
int m=0;
x=0;
for(;;){
k = my_getchar_unlocked();
if(k=='-'){
m=1;
break;
}
if('0'<=k&&k<='9'){
x=k-'0';
break;
}
}
for(;;){
k = my_getchar_unlocked();
if(k<'0'||k>'9'){
break;
}
x=x*10+k-'0';
}
if(m){
x=-x;
}
}
inline void rd(char &c){
int i;
for(;;){
i = my_getchar_unlocked();
if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){
break;
}
}
c = i;
}
inline int rd(char c[]){
int i;
int sz = 0;
for(;;){
i = my_getchar_unlocked();
if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){
break;
}
}
c[sz++] = i;
for(;;){
i = my_getchar_unlocked();
if(i==' '||i=='\n'||i=='\r'||i=='\t'||i==EOF){
break;
}
c[sz++] = i;
}
c[sz]='\0';
return sz;
}
inline int rd_int(void){
int x;
rd(x);
return x;
}
struct MY_WRITER{
char buf[1048576];
int s;
int e;
MY_WRITER(){
s = 0;
e = 1048576;
}
~MY_WRITER(){
if(s){
fwrite_unlocked(buf, 1, s, stdout);
}
}
}
;
MY_WRITER MY_WRITER_VAR;
void my_putchar_unlocked(int a){
if(MY_WRITER_VAR.s == MY_WRITER_VAR.e){
fwrite_unlocked(MY_WRITER_VAR.buf, 1, MY_WRITER_VAR.s, stdout);
MY_WRITER_VAR.s = 0;
}
MY_WRITER_VAR.buf[MY_WRITER_VAR.s++] = a;
}
inline void wt_L(char a){
my_putchar_unlocked(a);
}
inline void wt_L(int x){
int s=0;
int m=0;
char f[10];
if(x<0){
m=1;
x=-x;
}
while(x){
f[s++]=x%10;
x/=10;
}
if(!s){
f[s++]=0;
}
if(m){
my_putchar_unlocked('-');
}
while(s--){
my_putchar_unlocked(f[s]+'0');
}
}
inline void wt_L(const char c[]){
int i=0;
for(i=0;c[i]!='\0';i++){
my_putchar_unlocked(c[i]);
}
}
template<class S, class T> inline S chmin(S &a, T b){
if(a>b){
a=b;
}
return a;
}
int TEST;
int N;
int Q;
int S[100000];
int X;
int Y;
char buf[22];
int len;
int dist[26][26];
int res[100000];
int main(){
int Lj4PdHRW = rd_int();
for(TEST=(0);TEST<(Lj4PdHRW);TEST++){
int i, j, k, q;
wt_L("Case #");
wt_L(TEST+1);
wt_L(": ");
rd(N);
rd(Q);
for(i=(0);i<(N);i++){
int j;
len = rd(buf);
S[i] = 0;
for(j=(0);j<(len);j++){
S[i] |= (1<<(buf[j]-'A'));
}
}
for(j=(0);j<(26);j++){
int k;
for(k=(0);k<(26);k++){
dist[j][k] = 1073709056;
}
}
for(i=(0);i<(26);i++){
dist[i][i] = 0;
}
for(i=(0);i<(N);i++){
for(j=(0);j<(26);j++){
if(((S[i]) &(1<<(j)))){
int k;
for(k=(j+1);k<(26);k++){
if(((S[i]) &(1<<(k)))){
dist[j][k] = dist[k][j] = 1;
}
}
}
}
}
for(k=(0);k<(26);k++){
for(i=(0);i<(26);i++){
for(j=(0);j<(26);j++){
chmin(dist[i][j], dist[i][k] + dist[k][j]);
}
}
}
for(q=(0);q<(Q);q++){
rd(X);X += (-1);
rd(Y);Y += (-1);
res[q] = 1073709056;
if(S[X] & S[Y]){
res[q] = 2;
continue;
}
for(j=(0);j<(26);j++){
if(((S[X]) &(1<<(j)))){
for(k=(0);k<(26);k++){
if(((S[Y]) &(1<<(k)))){
chmin(res[q], dist[j][k]+2);
}
}
}
}
if(res[q]==1073709056){
res[q] = -1;
}
}
{
int zT28qSmp;
if(Q==0){
wt_L('\n');
}
else{
for(zT28qSmp=(0);zT28qSmp<(Q-1);zT28qSmp++){
wt_L(res[zT28qSmp]);
wt_L(' ');
}
wt_L(res[zT28qSmp]);
wt_L('\n');
}
}
}
return 0;
}
// cLay varsion 20201115-2
// --- original code ---
// int TEST;
// int N, Q, S[1d5], X, Y;
// char buf[22]; int len;
// int dist[26][26];
// int res[1d5];
// {
// REP(TEST,rd_int()){
// wtF("Case #{TEST+1}: ");
// rd(N,Q);
// rep(i,N){
// rd(buf@len);
// S[i] = 0;
// rep(j,len) S[i] |= (1<<(buf[j]-'A'));
// }
// rep(j,26) rep(k,26) dist[j][k] = int_inf;
// rep(i,26) dist[i][i] = 0;
// rep(i,N) rep(j,26) if(BIT_ith(S[i],j)) rep(k,j+1,26) if(BIT_ith(S[i],k)) dist[j][k] = dist[k][j] = 1;
// rep(k,26) rep(i,26) rep(j,26) dist[i][j] <?= dist[i][k] + dist[k][j];
// rep(q,Q){
// rd(X--, Y--);
// res[q] = int_inf;
// if(S[X] & S[Y]) res[q] = 2, continue;
// rep(j,26) if(BIT_ith(S[X],j)) rep(k,26) if(BIT_ith(S[Y],k)) res[q] <?= dist[j][k]+2;
// if(res[q]==int_inf) res[q] = -1;
// }
// wt(res(Q));
// }
// }
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmlubGluZSBpbnQgbXlfZ2V0Y2hhcl91bmxvY2tlZCgpewogIHN0YXRpYyBjaGFyIGJ1ZlsxMDQ4NTc2XTsKICBzdGF0aWMgaW50IHMgPSAxMDQ4NTc2OwogIHN0YXRpYyBpbnQgZSA9IDEwNDg1NzY7CiAgaWYocyA9PSBlICYmIGUgPT0gMTA0ODU3Nil7CiAgICBlID0gZnJlYWRfdW5sb2NrZWQoYnVmLCAxLCAxMDQ4NTc2LCBzdGRpbik7CiAgICBzID0gMDsKICB9CiAgaWYocyA9PSBlKXsKICAgIHJldHVybiBFT0Y7CiAgfQogIHJldHVybiBidWZbcysrXTsKfQppbmxpbmUgdm9pZCByZChpbnQgJngpewogIGludCBrOwogIGludCBtPTA7CiAgeD0wOwogIGZvcig7Oyl7CiAgICBrID0gbXlfZ2V0Y2hhcl91bmxvY2tlZCgpOwogICAgaWYoaz09Jy0nKXsKICAgICAgbT0xOwogICAgICBicmVhazsKICAgIH0KICAgIGlmKCcwJzw9ayYmazw9JzknKXsKICAgICAgeD1rLScwJzsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIGZvcig7Oyl7CiAgICBrID0gbXlfZ2V0Y2hhcl91bmxvY2tlZCgpOwogICAgaWYoazwnMCd8fGs+JzknKXsKICAgICAgYnJlYWs7CiAgICB9CiAgICB4PXgqMTAray0nMCc7CiAgfQogIGlmKG0pewogICAgeD0teDsKICB9Cn0KaW5saW5lIHZvaWQgcmQoY2hhciAmYyl7CiAgaW50IGk7CiAgZm9yKDs7KXsKICAgIGkgPSBteV9nZXRjaGFyX3VubG9ja2VkKCk7CiAgICBpZihpIT0nICcmJmkhPSdcbicmJmkhPSdccicmJmkhPSdcdCcmJmkhPUVPRil7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBjID0gaTsKfQppbmxpbmUgaW50IHJkKGNoYXIgY1tdKXsKICBpbnQgaTsKICBpbnQgc3ogPSAwOwogIGZvcig7Oyl7CiAgICBpID0gbXlfZ2V0Y2hhcl91bmxvY2tlZCgpOwogICAgaWYoaSE9JyAnJiZpIT0nXG4nJiZpIT0nXHInJiZpIT0nXHQnJiZpIT1FT0YpewogICAgICBicmVhazsKICAgIH0KICB9CiAgY1tzeisrXSA9IGk7CiAgZm9yKDs7KXsKICAgIGkgPSBteV9nZXRjaGFyX3VubG9ja2VkKCk7CiAgICBpZihpPT0nICd8fGk9PSdcbid8fGk9PSdccid8fGk9PSdcdCd8fGk9PUVPRil7CiAgICAgIGJyZWFrOwogICAgfQogICAgY1tzeisrXSA9IGk7CiAgfQogIGNbc3pdPSdcMCc7CiAgcmV0dXJuIHN6Owp9CmlubGluZSBpbnQgcmRfaW50KHZvaWQpewogIGludCB4OwogIHJkKHgpOwogIHJldHVybiB4Owp9CnN0cnVjdCBNWV9XUklURVJ7CiAgY2hhciBidWZbMTA0ODU3Nl07CiAgaW50IHM7CiAgaW50IGU7CiAgTVlfV1JJVEVSKCl7CiAgICBzID0gMDsKICAgIGUgPSAxMDQ4NTc2OwogIH0KICB+TVlfV1JJVEVSKCl7CiAgICBpZihzKXsKICAgICAgZndyaXRlX3VubG9ja2VkKGJ1ZiwgMSwgcywgc3Rkb3V0KTsKICAgIH0KICB9Cn0KOwpNWV9XUklURVIgTVlfV1JJVEVSX1ZBUjsKdm9pZCBteV9wdXRjaGFyX3VubG9ja2VkKGludCBhKXsKICBpZihNWV9XUklURVJfVkFSLnMgPT0gTVlfV1JJVEVSX1ZBUi5lKXsKICAgIGZ3cml0ZV91bmxvY2tlZChNWV9XUklURVJfVkFSLmJ1ZiwgMSwgTVlfV1JJVEVSX1ZBUi5zLCBzdGRvdXQpOwogICAgTVlfV1JJVEVSX1ZBUi5zID0gMDsKICB9CiAgTVlfV1JJVEVSX1ZBUi5idWZbTVlfV1JJVEVSX1ZBUi5zKytdID0gYTsKfQppbmxpbmUgdm9pZCB3dF9MKGNoYXIgYSl7CiAgbXlfcHV0Y2hhcl91bmxvY2tlZChhKTsKfQppbmxpbmUgdm9pZCB3dF9MKGludCB4KXsKICBpbnQgcz0wOwogIGludCBtPTA7CiAgY2hhciBmWzEwXTsKICBpZih4PDApewogICAgbT0xOwogICAgeD0teDsKICB9CiAgd2hpbGUoeCl7CiAgICBmW3MrK109eCUxMDsKICAgIHgvPTEwOwogIH0KICBpZighcyl7CiAgICBmW3MrK109MDsKICB9CiAgaWYobSl7CiAgICBteV9wdXRjaGFyX3VubG9ja2VkKCctJyk7CiAgfQogIHdoaWxlKHMtLSl7CiAgICBteV9wdXRjaGFyX3VubG9ja2VkKGZbc10rJzAnKTsKICB9Cn0KaW5saW5lIHZvaWQgd3RfTChjb25zdCBjaGFyIGNbXSl7CiAgaW50IGk9MDsKICBmb3IoaT0wO2NbaV0hPSdcMCc7aSsrKXsKICAgIG15X3B1dGNoYXJfdW5sb2NrZWQoY1tpXSk7CiAgfQp9CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIGNobWluKFMgJmEsIFQgYil7CiAgaWYoYT5iKXsKICAgIGE9YjsKICB9CiAgcmV0dXJuIGE7Cn0KaW50IFRFU1Q7CmludCBOOwppbnQgUTsKaW50IFNbMTAwMDAwXTsKaW50IFg7CmludCBZOwpjaGFyIGJ1ZlsyMl07CmludCBsZW47CmludCBkaXN0WzI2XVsyNl07CmludCByZXNbMTAwMDAwXTsKaW50IG1haW4oKXsKICBpbnQgTGo0UGRIUlcgPSByZF9pbnQoKTsKICBmb3IoVEVTVD0oMCk7VEVTVDwoTGo0UGRIUlcpO1RFU1QrKyl7CiAgICBpbnQgaSwgaiwgaywgcTsKICAgIHd0X0woIkNhc2UgIyIpOwogICAgd3RfTChURVNUKzEpOwogICAgd3RfTCgiOiAiKTsKICAgIHJkKE4pOwogICAgcmQoUSk7CiAgICBmb3IoaT0oMCk7aTwoTik7aSsrKXsKICAgICAgaW50IGo7CiAgICAgIGxlbiA9IHJkKGJ1Zik7CiAgICAgIFNbaV0gPSAwOwogICAgICBmb3Ioaj0oMCk7ajwobGVuKTtqKyspewogICAgICAgIFNbaV0gfD0gKDE8PChidWZbal0tJ0EnKSk7CiAgICAgIH0KICAgIH0KICAgIGZvcihqPSgwKTtqPCgyNik7aisrKXsKICAgICAgaW50IGs7CiAgICAgIGZvcihrPSgwKTtrPCgyNik7aysrKXsKICAgICAgICBkaXN0W2pdW2tdID0gMTA3MzcwOTA1NjsKICAgICAgfQogICAgfQogICAgZm9yKGk9KDApO2k8KDI2KTtpKyspewogICAgICBkaXN0W2ldW2ldID0gMDsKICAgIH0KICAgIGZvcihpPSgwKTtpPChOKTtpKyspewogICAgICBmb3Ioaj0oMCk7ajwoMjYpO2orKyl7CiAgICAgICAgaWYoKChTW2ldKSAmKDE8PChqKSkpKXsKICAgICAgICAgIGludCBrOwogICAgICAgICAgZm9yKGs9KGorMSk7azwoMjYpO2srKyl7CiAgICAgICAgICAgIGlmKCgoU1tpXSkgJigxPDwoaykpKSl7CiAgICAgICAgICAgICAgZGlzdFtqXVtrXSA9IGRpc3Rba11bal0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmb3Ioaz0oMCk7azwoMjYpO2srKyl7CiAgICAgIGZvcihpPSgwKTtpPCgyNik7aSsrKXsKICAgICAgICBmb3Ioaj0oMCk7ajwoMjYpO2orKyl7CiAgICAgICAgICBjaG1pbihkaXN0W2ldW2pdLCBkaXN0W2ldW2tdICsgZGlzdFtrXVtqXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmb3IocT0oMCk7cTwoUSk7cSsrKXsKICAgICAgcmQoWCk7WCArPSAoLTEpOwogICAgICByZChZKTtZICs9ICgtMSk7CiAgICAgIHJlc1txXSA9IDEwNzM3MDkwNTY7CiAgICAgIGlmKFNbWF0gJiBTW1ldKXsKICAgICAgICByZXNbcV0gPSAyOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZvcihqPSgwKTtqPCgyNik7aisrKXsKICAgICAgICBpZigoKFNbWF0pICYoMTw8KGopKSkpewogICAgICAgICAgZm9yKGs9KDApO2s8KDI2KTtrKyspewogICAgICAgICAgICBpZigoKFNbWV0pICYoMTw8KGspKSkpewogICAgICAgICAgICAgIGNobWluKHJlc1txXSwgZGlzdFtqXVtrXSsyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZihyZXNbcV09PTEwNzM3MDkwNTYpewogICAgICAgIHJlc1txXSA9IC0xOwogICAgICB9CiAgICB9CiAgICB7CiAgICAgIGludCB6VDI4cVNtcDsKICAgICAgaWYoUT09MCl7CiAgICAgICAgd3RfTCgnXG4nKTsKICAgICAgfQogICAgICBlbHNlewogICAgICAgIGZvcih6VDI4cVNtcD0oMCk7elQyOHFTbXA8KFEtMSk7elQyOHFTbXArKyl7CiAgICAgICAgICB3dF9MKHJlc1t6VDI4cVNtcF0pOwogICAgICAgICAgd3RfTCgnICcpOwogICAgICAgIH0KICAgICAgICB3dF9MKHJlc1t6VDI4cVNtcF0pOwogICAgICAgIHd0X0woJ1xuJyk7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIDA7Cn0KLy8gY0xheSB2YXJzaW9uIDIwMjAxMTE1LTIKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyBpbnQgVEVTVDsKLy8gaW50IE4sIFEsIFNbMWQ1XSwgWCwgWTsKLy8gY2hhciBidWZbMjJdOyBpbnQgbGVuOwovLyBpbnQgZGlzdFsyNl1bMjZdOwovLyBpbnQgcmVzWzFkNV07Ci8vIHsKLy8gICBSRVAoVEVTVCxyZF9pbnQoKSl7Ci8vICAgICB3dEYoIkNhc2UgI3tURVNUKzF9OiAiKTsKLy8gICAgIHJkKE4sUSk7Ci8vICAgICByZXAoaSxOKXsKLy8gICAgICAgcmQoYnVmQGxlbik7Ci8vICAgICAgIFNbaV0gPSAwOwovLyAgICAgICByZXAoaixsZW4pIFNbaV0gfD0gKDE8PChidWZbal0tJ0EnKSk7Ci8vICAgICB9Ci8vICAgICByZXAoaiwyNikgcmVwKGssMjYpIGRpc3Rbal1ba10gPSBpbnRfaW5mOwovLyAgICAgcmVwKGksMjYpIGRpc3RbaV1baV0gPSAwOwovLyAgICAgcmVwKGksTikgcmVwKGosMjYpIGlmKEJJVF9pdGgoU1tpXSxqKSkgcmVwKGssaisxLDI2KSBpZihCSVRfaXRoKFNbaV0saykpIGRpc3Rbal1ba10gPSBkaXN0W2tdW2pdID0gMTsKLy8gICAgIHJlcChrLDI2KSByZXAoaSwyNikgcmVwKGosMjYpIGRpc3RbaV1bal0gPD89IGRpc3RbaV1ba10gKyBkaXN0W2tdW2pdOwovLyAgICAgcmVwKHEsUSl7Ci8vICAgICAgIHJkKFgtLSwgWS0tKTsKLy8gICAgICAgcmVzW3FdID0gaW50X2luZjsKLy8gICAgICAgaWYoU1tYXSAmIFNbWV0pIHJlc1txXSA9IDIsIGNvbnRpbnVlOwovLyAgICAgICByZXAoaiwyNikgaWYoQklUX2l0aChTW1hdLGopKSByZXAoaywyNikgaWYoQklUX2l0aChTW1ldLGspKSByZXNbcV0gPD89IGRpc3Rbal1ba10rMjsKLy8gICAgICAgaWYocmVzW3FdPT1pbnRfaW5mKSByZXNbcV0gPSAtMTsKLy8gICAgIH0KLy8gICAgIHd0KHJlcyhRKSk7Ci8vICAgfQovLyB9Cg==