
Code: Select all
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cctype>
#include<cstdlib>
#include<cmath>
#include<sstream>
#include<fstream>
#include<vector>
#include<string>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<list>
#include<bitset>
#include<algorithm>
#include<functional>
using namespace std;
int main(){
int t,cost;
scanf("%d",&t);
while(t--){
string s;
char line[25];
vector<string>D;
while(scanf("%s",line)){
if(line[0]=='*')break;
D.push_back(line);
}
gets(line);
while(gets(line)){
if(!line[0])break;
stringstream is(line);
string a,b;
is>>a>>b;
vector<string>d;
for(int i = 0;i<D.size();++i)if(D[i].size()==a.size())d.push_back(D[i]);
queue< pair<string,int> >Q;
set< string >S;
Q.push( make_pair(a,0) );
S.insert(a);
while(Q.size()){
s = Q.front().first;
cost = Q.front().second;
Q.pop();
if(s==b){
printf("%s %s %d\n",a.c_str(),b.c_str(),cost);
break;
}
for(int i = 0;i<d.size();++i){
int c = 0;
for(int j = 0;j<d[i].size();++j)if(d[i][j]!=s[j])++c;
if(S.find(d[i])!=S.end() || c!=1)continue;
S.insert(d[i]);
Q.push( make_pair(d[i],cost+1) );
}
}
}if(t)puts("");
}
return 0;
}