voidinit() { for (int i = 0; i < 26; ++i) { for (int j = 0; j < 26; ++j) G1[i][j] = G2[i][j] = INF; G1[i][i] = G2[i][i] = 0; } }
voidread() { int w; char a, b, u, v; while (m--) { cin >> a >> b >> u >> v >> w; auto ptr = (a == 'Y') ? G1 : G2; u -= 'A', v -= 'A'; ptr[u][v] = min(w, ptr[u][v]); if (b == 'B') ptr[v][u] = min(w, ptr[v][u]); } }
voidFloydWarshall() { for (int k = 0; k < 26; ++k) { for (int i = 0; i < 26; ++i) for (int j = 0; j < 26; ++j) { G1[i][j] = min(G1[i][k] + G1[k][j], G1[i][j]); G2[i][j] = min(G2[i][k] + G2[k][j], G2[i][j]); } } }
voidsolve() { char a, b; cin >> a >> b; a -= 'A', b -= 'A';
int mn = INF; for (int k = 0; k < 26; ++k) mn = min(G1[a][k] + G2[b][k], mn);
if (mn == INF) { cout << "You will never meet.\n"; return; } cout << mn; for (int k = 0; k < 26; ++k) if (G1[a][k] + G2[b][k] == mn) cout << ' ' << char(k + 'A'); cout << '\n'; }
intmain() { while (cin >> m && m) { init(); read(); FloydWarshall(); solve(); } }