#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MX = 205 ;
vector < int > v[ MX] ;
int vist[ MX] , mn;
void init( )
{
for ( int i= 0 ; i< MX; i++ )
{
v[ i] .clear ( ) ;
}
}
void dfs( int src, int des, int cur)
{
if ( cur >= mn)
return ;
if ( src == des)
{
mn = min( cur, mn) ;
return ;
}
vist[ src] = 1 ;
int i, x;
for ( i= 0 ; i< v[ src] .size ( ) ; i++ )
{
x = v[ src] [ i] ;
if ( ! vist[ x] )
{
dfs( x, des, cur+ 1 ) ;
}
}
vist[ src] = 0 ;
}
int compare( string a, string b)
{
int cnt= 0 , i, l = a.size ( ) ;
for ( i= 0 ; i< l; i++ )
{
if ( a[ i] == b[ i] )
cnt++ ;
}
if ( cnt >= l- 1 )
return 0 ;
return 1 ;
}
int main( )
{
string a, b, s;
int c, t, i, f= 0 ,j, k;
scanf ( "%d" , & t) ;
cin .ignore ( ) ;
while ( t-- )
{
init( ) ;
vector < string> mp[ 11 ] ;
map < string, int > mps;
c= 0 ;
while ( cin >> a)
{
if ( a == "*" )
break ;
mp[ a.size ( ) ] .push_back ( a) ;
mps[ a] = c;
c++ ;
}
for ( i= 1 ; i<= 10 ; i++ )
{
for ( j= 0 ; j< mp[ i] .size ( ) ; j++ )
{
for ( k= 0 ; k< mp[ i] .size ( ) ; k++ )
{
if ( j ! = k)
{
if ( ! compare( mp[ i] [ j] , mp[ i] [ k] ) )
{
v[ mps[ mp[ i] [ j] ] ] .push_back ( mps[ mp[ i] [ k] ] ) ;
v[ mps[ mp[ i] [ k] ] ] .push_back ( mps[ mp[ i] [ j] ] ) ;
}
}
}
}
}
cin .ignore ( ) ;
if ( f)
puts ( "" ) ;
f= 1 ;
while ( getline( cin , s) && s.size ( ) > 0 )
{
istringstream ss( s) ;
string x;
i= 0 ;
while ( ss >> x)
{
if ( i == 0 )
a = x;
else
b = x;
i++ ;
}
memset ( vist, 0 , sizeof vist) ;
mn = mp[ a.size ( ) ] .size ( ) ;
dfs( mps[ a] , mps[ b] , 0 ) ;
cout << a << " " << b << " " << mn << endl;
}
}
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKY29uc3QgaW50IE1YID0gMjA1OwoKdmVjdG9yIDxpbnQ+IHZbTVhdOwppbnQgdmlzdFtNWF0sIG1uOwoKdm9pZCBpbml0KCkKewogICAgZm9yKGludCBpPTA7IGk8TVg7IGkrKykKICAgIHsKICAgICAgICB2W2ldLmNsZWFyKCk7CiAgICB9Cn0KCnZvaWQgZGZzKGludCBzcmMsIGludCBkZXMsIGludCBjdXIpCnsKICAgIGlmKGN1ciA+PSBtbikKICAgICAgICByZXR1cm47CiAgICBpZihzcmMgPT0gZGVzKQogICAgewogICAgICAgIG1uID0gbWluKGN1ciwgbW4pOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIHZpc3Rbc3JjXSA9IDE7CiAgICBpbnQgaSwgeDsKICAgIGZvcihpPTA7IGk8dltzcmNdLnNpemUoKTsgaSsrKQogICAgewogICAgICAgIHggPSB2W3NyY11baV07CiAgICAgICAgaWYoICF2aXN0W3hdICkKICAgICAgICB7CiAgICAgICAgICAgIGRmcyh4LCBkZXMsIGN1cisxKTsKICAgICAgICB9CiAgICB9CiAgICB2aXN0W3NyY10gPSAwOwp9CgppbnQgY29tcGFyZShzdHJpbmcgYSwgc3RyaW5nIGIpCnsKICAgIGludCBjbnQ9MCwgaSwgbCA9IGEuc2l6ZSgpOwogICAgZm9yKGk9MDsgaTxsOyBpKyspCiAgICB7CiAgICAgICAgaWYoYVtpXSA9PSBiW2ldKQogICAgICAgICAgICBjbnQrKzsKICAgIH0KICAgIGlmKGNudCA+PSBsLTEpCiAgICAgICAgcmV0dXJuIDA7CiAgICByZXR1cm4gMTsKfQoKaW50IG1haW4oKQp7CiAgICBzdHJpbmcgYSwgYiwgczsKICAgIGludCBjLCB0LCBpLCBmPTAsaiwgazsKICAgIHNjYW5mKCIlZCIsICAmdCk7CiAgICBjaW4uaWdub3JlKCk7CiAgICB3aGlsZSh0LS0pCiAgICB7CiAgICAgICAgaW5pdCgpOwogICAgICAgIHZlY3RvciA8c3RyaW5nPiBtcFsxMV07CiAgICAgICAgbWFwIDxzdHJpbmcsIGludD4gbXBzOwogICAgICAgIGM9MDsKICAgICAgICB3aGlsZShjaW4gPj4gYSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKCBhID09ICIqIiApCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgbXBbYS5zaXplKCldLnB1c2hfYmFjayhhKTsKICAgICAgICAgICAgbXBzW2FdID0gYzsKICAgICAgICAgICAgYysrOwogICAgICAgIH0KICAgICAgICBmb3IoaT0xOyBpPD0xMDsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yKGo9MDsgajxtcFtpXS5zaXplKCk7IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yKGs9MDsgazxtcFtpXS5zaXplKCk7IGsrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZihqICE9IGspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiggIWNvbXBhcmUobXBbaV1bal0sIG1wW2ldW2tdKSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZbbXBzW21wW2ldW2pdXV0ucHVzaF9iYWNrKG1wc1ttcFtpXVtrXV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdlttcHNbbXBbaV1ba11dXS5wdXNoX2JhY2sobXBzW21wW2ldW2pdXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2luLmlnbm9yZSgpOwogICAgICAgIGlmKGYpCiAgICAgICAgICAgIHB1dHMoIiIpOwogICAgICAgIGY9MTsKICAgICAgICB3aGlsZShnZXRsaW5lKGNpbiwgcykgJiYgcy5zaXplKCkgPiAwKQogICAgICAgIHsKICAgICAgICAgICAgaXN0cmluZ3N0cmVhbSBzcyhzKTsKICAgICAgICAgICAgc3RyaW5nIHg7CiAgICAgICAgICAgIGk9MDsKICAgICAgICAgICAgd2hpbGUoc3MgPj4geCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoaSA9PSAwKQogICAgICAgICAgICAgICAgICAgIGEgPSB4OwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGIgPSB4OwogICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1lbXNldCh2aXN0LCAwLCBzaXplb2YgdmlzdCk7CiAgICAgICAgICAgIG1uID0gbXBbYS5zaXplKCldLnNpemUoKTsKICAgICAgICAgICAgZGZzKG1wc1thXSwgbXBzW2JdLCAwKTsKICAgICAgICAgICAgY291dCA8PCBhIDw8ICIgIiA8PCAgYiA8PCAiICIgPDwgbW4gPDwgZW5kbDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQo=
stdin
MgoKZGlwCmxpcAptYWQKbWFwCm1hcGxlCm1heQpwYWQKcGlwCnBvZApwb3AKc2FwCnNpcApzbGljZQpzbGljawpzcGljZQpzdGljawpzdG9jawoqCnNwaWNlIHN0b2NrCm1heSBwb2QKCmRpcApsaXAKbWFkCm1hcAptYXBsCm1hcGxlCm1heQpwYWQKcGlwCnBvZApwb3AKc2FwCnNpcApzbGljZQpzbGljawpzcGljZQpzdGljawpzdG9jawoqCnNwaWNlIHNsaWNrCm1heSBtYWQKbWFwIG1hcAo=
2
dip
lip
mad
map
maple
may
pad
pip
pod
pop
sap
sip
slice
slick
spice
stick
stock
*
spice stock
may pod
dip
lip
mad
map
mapl
maple
may
pad
pip
pod
pop
sap
sip
slice
slick
spice
stick
stock
*
spice slick
may mad
map map