/* Kristoffer Hansen. arnsfelt@daimi.au.dk */ #include #include #include #include #include #include int N,n,p; list tokenize(string const &s, const char* const delimiters = " \t\n") { list tokens; string::size_type i = 0; while (i edges; map G; map D; queue Q; int main() { int caseno; string s; list l1; list l2; list::const_iterator li1,li2; set::iterator si; caseno=1; cin >> N; while (N-->0 && cin >> p >> n) { cout << "Scenario " << caseno++ << endl; G.clear(); D.clear(); while (p-->0) { while (getline(cin,s) && s.length()==0) ; l1 = tokenize(s.substr(0,s.find(':')),", \t"); l2.clear(); for (li1=l1.begin(); li1!=l1.end(); li1++) { s = *li1; li1++; s += ", "+*li1; l2.push_back(s); } for (li1=l2.begin(); li1!=l2.end(); li1++) for (li2=l2.begin(); li2!=l2.end(); li2++) { if (li1==li2) continue; G[*li1].insert(*li2); G[*li2].insert(*li1); } } Q.push("Erdos, P."); D["Erdos, P."]=0; while (!Q.empty()) { s = Q.front(); Q.pop(); for (si=G[s].begin(); si!=G[s].end(); si++) { if (D.find(*si)==D.end()) { D[*si] = D[s]+1; Q.push(*si); } } } while (n-->0) { while (getline(cin,s) && s.length()==0) ; cout << s << " "; if (D.find(s)==D.end()) cout << "infinity\n"; else cout << D[s] << endl; } } return 0; }