#include<bits/stdc++.h>
#define all(x) (x).begin(),(x).end()
#define allr(x) x.rbegin(),x.rend()
#define sz(x) ((int)x.size())
#define Debug(x) cout<<#x<<" = "<<x<<endl
#define AbdElmawla std::ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define S second
#define F first
using namespace __gnu_pbds;
using namespace std;
typedef unsigned long long int ull;
typedef long long ll;
typedef long double ld;
int dx[]= {-1,1,0,0,1,-1,1,-1,0};
int dy[]= {0,0,1,-1,1,-1,-1,1,0};
int dx2[]= {-1,0,1,0};
int dy2[]= {0,1,0,-1};
void files()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif // ONLINE_JUDGE
}
vector<vector<pair<int,pair<double,double>>>>adj(101);
vector<pair<double,double>>dis(101);
vector<int>pre(101);
struct edge
{
int from,to;
double t,d;
edge(int from,int to,double t,double d):from(from),to(to),d(d),t(t) {}
bool operator<(const edge&e)const
{
if(e.t==t)
return e.d<d;
return e.t<t;
}
};
void Dijkstra(int s)
{
priority_queue<edge>pq;
pq.push(edge(-1,s,0,0));
dis[s]= {0,0};
while(!pq.empty())
{
auto e=pq.top();
pq.pop();
if(e.t>dis[e.to].F||(e.t==dis[e.to].F&&e.d>dis[e.to].S))
continue;
pre[e.to]=e.from;
for(auto &it:adj[e.to])
{
if(dis[it.F].F>max(e.t,it.S.F)||(dis[it.F].F==max(e.t,it.S.F)&&dis[it.F].S>it.S.S+e.d))
{
dis[it.F].F=max(e.t,it.S.F);
dis[it.F].S=it.S.S+e.d;
pq.push(edge(e.to,it.F,dis[it.F].F,dis[it.F].S));
}
}
}
return;
}
int main()
{
AbdElmawla
files();
/*---------------------------------------*/
int x,y,n,t,s,e;
double c,d;
while(cin>>n)
{
cin>>t>>s>>e;
s--,e--;
for(int i=0; i<n; i++)
adj[i].clear(),dis[i]= {1e9,1e9};
while(t--)
{
cin>>x>>y>>c>>d;
adj[x-1].push_back({y-1,{c,d}});
adj[y-1].push_back({x-1,{c,d}});
}
Dijkstra(s);
stack<int>st;
t=e;
while(e!=s){
st.push(e);
e=pre[e];
}
cout<<s+1;
while(!st.empty())cout<<' '<<st.top()+1,st.pop();
cout<<fixed<<setprecision(1)<<'\n'<<dis[t].S<<' '<<dis[t].F<<'\n';
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBhbGwoeCkgICAgICh4KS5iZWdpbigpLCh4KS5lbmQoKQojZGVmaW5lIGFsbHIoeCkgICAgeC5yYmVnaW4oKSx4LnJlbmQoKQojZGVmaW5lIHN6KHgpICAgICAgKChpbnQpeC5zaXplKCkpCiNkZWZpbmUgRGVidWcoeCkgICAgICBjb3V0PDwjeDw8IiA9ICI8PHg8PGVuZGwKI2RlZmluZSBBYmRFbG1hd2xhIHN0ZDo6aW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTtjaW4udGllKDApO2NvdXQudGllKDApOwojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgojZGVmaW5lIG9yZGVyZWRfc2V0IHRyZWU8aW50LCBudWxsX3R5cGUsbGVzczxpbnQ+LCByYl90cmVlX3RhZyx0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+CiNkZWZpbmUgUyBzZWNvbmQKI2RlZmluZSBGIGZpcnN0CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiBsb25nIGRvdWJsZSBsZDsKaW50IGR4W109IHstMSwxLDAsMCwxLC0xLDEsLTEsMH07CmludCBkeVtdPSB7MCwwLDEsLTEsMSwtMSwtMSwxLDB9OwppbnQgZHgyW109IHstMSwwLDEsMH07CmludCBkeTJbXT0gezAsMSwwLC0xfTsKdm9pZCBmaWxlcygpCnsKI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmIC8vIE9OTElORV9KVURHRQp9CnZlY3Rvcjx2ZWN0b3I8cGFpcjxpbnQscGFpcjxkb3VibGUsZG91YmxlPj4+PmFkaigxMDEpOwp2ZWN0b3I8cGFpcjxkb3VibGUsZG91YmxlPj5kaXMoMTAxKTsKdmVjdG9yPGludD5wcmUoMTAxKTsKc3RydWN0IGVkZ2UKewogICAgaW50IGZyb20sdG87CiAgICBkb3VibGUgdCxkOwogICAgZWRnZShpbnQgZnJvbSxpbnQgdG8sZG91YmxlIHQsZG91YmxlIGQpOmZyb20oZnJvbSksdG8odG8pLGQoZCksdCh0KSB7fQogICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgZWRnZSZlKWNvbnN0CiAgICB7CiAgICAgICAgaWYoZS50PT10KQogICAgICAgICAgICByZXR1cm4gZS5kPGQ7CiAgICAgICAgcmV0dXJuIGUudDx0OwogICAgfQp9Owp2b2lkIERpamtzdHJhKGludCBzKQp7CiAgICBwcmlvcml0eV9xdWV1ZTxlZGdlPnBxOwogICAgcHEucHVzaChlZGdlKC0xLHMsMCwwKSk7CiAgICBkaXNbc109IHswLDB9OwogICAgd2hpbGUoIXBxLmVtcHR5KCkpCiAgICB7CiAgICAgICAgYXV0byBlPXBxLnRvcCgpOwogICAgICAgIHBxLnBvcCgpOwogICAgICAgIGlmKGUudD5kaXNbZS50b10uRnx8KGUudD09ZGlzW2UudG9dLkYmJmUuZD5kaXNbZS50b10uUykpCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIHByZVtlLnRvXT1lLmZyb207CiAgICAgICAgZm9yKGF1dG8gJml0OmFkaltlLnRvXSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKGRpc1tpdC5GXS5GPm1heChlLnQsaXQuUy5GKXx8KGRpc1tpdC5GXS5GPT1tYXgoZS50LGl0LlMuRikmJmRpc1tpdC5GXS5TPml0LlMuUytlLmQpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkaXNbaXQuRl0uRj1tYXgoZS50LGl0LlMuRik7CiAgICAgICAgICAgICAgICBkaXNbaXQuRl0uUz1pdC5TLlMrZS5kOwogICAgICAgICAgICAgICAgcHEucHVzaChlZGdlKGUudG8saXQuRixkaXNbaXQuRl0uRixkaXNbaXQuRl0uUykpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmludCBtYWluKCkKewogICAgQWJkRWxtYXdsYQogICAgZmlsZXMoKTsKICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgICBpbnQgeCx5LG4sdCxzLGU7CiAgICBkb3VibGUgYyxkOwogICAgd2hpbGUoY2luPj5uKQogICAgewogICAgICAgIGNpbj4+dD4+cz4+ZTsKICAgICAgICBzLS0sZS0tOwogICAgICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKykKICAgICAgICAgICAgYWRqW2ldLmNsZWFyKCksZGlzW2ldPSB7MWU5LDFlOX07CiAgICAgICAgd2hpbGUodC0tKQogICAgICAgIHsKICAgICAgICAgICAgY2luPj54Pj55Pj5jPj5kOwogICAgICAgICAgICBhZGpbeC0xXS5wdXNoX2JhY2soe3ktMSx7YyxkfX0pOwogICAgICAgICAgICBhZGpbeS0xXS5wdXNoX2JhY2soe3gtMSx7YyxkfX0pOwogICAgICAgIH0KICAgICAgICBEaWprc3RyYShzKTsKICAgICAgICBzdGFjazxpbnQ+c3Q7CiAgICAgICAgdD1lOwogICAgICAgIHdoaWxlKGUhPXMpewogICAgICAgICAgICBzdC5wdXNoKGUpOwogICAgICAgICAgICBlPXByZVtlXTsKICAgICAgICB9CiAgICAgICAgY291dDw8cysxOwogICAgICAgIHdoaWxlKCFzdC5lbXB0eSgpKWNvdXQ8PCcgJzw8c3QudG9wKCkrMSxzdC5wb3AoKTsKICAgICAgICBjb3V0PDxmaXhlZDw8c2V0cHJlY2lzaW9uKDEpPDwnXG4nPDxkaXNbdF0uUzw8JyAnPDxkaXNbdF0uRjw8J1xuJzsKICAgIH0KfQo=