#include <iostream>
#include <map>
#include <string>
#include <sstream>

using namespace std;

map<int, map<int, int> > mapa, costo, padre;
int ni, com, fin;

string inttostr(int i) {
    ostringstream out;
    out << i;
    return out.str();
}

void floyd() {
    map<int, int> mapita;

    for (int i = 1; i <= ni; i++)
        for (int j = 1; j <= ni; j++) {
            costo[i][j] = (mapa[i].find(j) != mapa[i].end()) ? mapa[i][j] : 9999999;
            padre[i][j] = 0;
        }

    for (int i = 1; i <= ni; i++)
        costo[i][i] = 0;

    for (int k = 1; k <= ni; k++)
        for (int j = 1; j <= ni; j++)
            for (int i = 1; i <= ni; i++)
                if (costo[i][j] > costo[i][k] + costo[k][j]) {
                    costo[i][j] = costo[i][k] + costo[k][j];
                    padre[i][j] = k;
                }
}

string camino(int i, int j) {
    int pa = padre[i][j];
    if (pa != 0) {
        string cam2 = camino(i, pa);
        return cam2.substr(0, cam2.rfind(" ")) + " " + camino(pa, j);
    }
    return inttostr(i) + " " + inttostr(j);
}

int main() {
    int caso = 1, desde, cruces, a, delay;

    while (cin >> ni && ni != 0) {
        mapa.clear(); costo.clear(); padre.clear();
        for (int desde = 1; desde <= ni; desde++) {
            cin >> cruces;
            for (int j = 0; j < cruces; j++) {
                cin >> a >> delay;
                mapa[desde][a] = delay;
            }
        }
        cin >> com >> fin;
        floyd();
        printf("Case %d: Path = %s; %d second delay\n", caso++, camino(com, fin).c_str(), costo[com][fin]);
    }
    return 0;
}

