#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
const int N=510;
const int INF=100000010;
int n,m,st,ed;
int G[N][N],cost[N][N];
int d[N],c[N];
bool vis[N]={false},vip[N]={false};
vector<int> pre1[N],pre2[N];
void Dij(int s){
fill(d,d+N,INF);
fill(c,c+N,INF);
c[s]=0;
d[s]=0;
for(int i=0;i<n;i++){
int u=-1,MIN=INF;
int k=-1,MEI=INF;
for(int j=0;j<n;j++){
if(vis[j]==false&&d[j]<MIN){
u=j;
MIN=d[j];
}
if(vip[j]==false&&c[j]<MEI){
k=j;
MEI=c[j];
}
}
if(u==-1) return;
if(k==-1) return;
vis[u]=true;
vip[k]=true;
for(int v=0;v<n;v++){
if(vis[v]==false&&G[u][v]!=INF){
if(G[u][v]+d[u]<d[v]){
d[v]=G[u][v]+d[u];
pre1[v].clear();
pre1[v].push_back(u);
}else if(G[u][v]+d[u]==d[v]){
pre1[v].push_back(u);
}
}
if(vip[v]==false&&cost[k][v]!=INF){
if(cost[k][v]+c[k]<c[v]){
c[v]=cost[k][v]+c[k];
pre2[v].clear();
pre2[v].push_back(k);
}else if(cost[k][v]+c[k]==c[v]){
pre2[v].push_back(k);
}
}
}
}
}
vector<int> temp1,ans1,temp2,ans2;
int ZD=INF,ZD1=INF;
void DFS1(int v){
if(v==st){
temp1.push_back(v);
int ZUI;
for(int i=temp1.size()-1;i>0;i--){
int index1=temp1[i],index2=temp1[i-1];
ZUI+=cost[index1][index2];
}
if(ZUI<ZD){
ZD=ZUI;
ans1=temp1;
}
temp1.pop_back();
return;
}
temp1.push_back(v);
for(int i=0;i<pre1[v].size();i++){
DFS1(pre1[v][i]);
}
temp1.pop_back();
}
void DFS2(int v){
if(v==st){
temp2.push_back(v);
int ZUI1=temp2.size();
if(ZUI1<ZD1){
ZD1=ZUI1;
ans2=temp2;
}
temp2.pop_back();
return;
}
temp2.push_back(v);
for(int i=0;i<pre2[v].size();i++){
DFS2(pre2[v][i]);
}
temp2.pop_back();
}
int main(){
fill(G[0],G[0]+N*N,INF);
fill(cost[0],cost[0]+N*N,INF);
scanf("%d%d",&n,&m);
int v1,v2,way,length,time;
for(int i=0;i<m;i++){
scanf("%d%d%d%d%d",&v1,&v2,&way,&length,&time);
if(way==1){
G[v1][v2]=length;
cost[v1][v2]=time;
}else{
G[v1][v2]=G[v2][v1]=length;
cost[v1][v2]=cost[v2][v1]=time;
}
}
scanf("%d%d",&st,&ed);
Dij(st);
DFS1(ed);
DFS2(ed);
if(ans1!=ans2){
printf("Distance = %d: ",d[ed]);
for(int i=ans1.size()-1;i>=0;i--){
printf("%d",ans1[i]);
if(i>0) printf(" -> ");
}
printf("\n");
printf("Time = %d: ",c[ed]);
for(int i=ans2.size()-1;i>=0;i--){
printf("%d",ans2[i]);
if(i>0) printf(" -> ");
}
printf("\n");
}else{
printf("Distance = %d; Time = %d: ",d[ed],c[ed]);
for(int i=ans1.size()-1;i>=0;i--){
printf("%d",ans1[i]);
if(i>0) printf(" -> ");
}
printf("\n");
}
return 0;
}