#include<bits/stdc++.h>
#define N 100010
using namespace std;
typedef pair<int,int> pi;
vector<pi> a[N];
int oo=1e9+7;
int dis[N];
int trace[N];
int n,m;
void dijkstra()
{
priority_queue<pi,vector<pi>,greater<pi> >pq;
for(int i=1;i<=n;i++)
dis[i]=1000000007;
dis[1]=0;
pq.push(pi(0,1));
while(pq.size())
{
int u,du,w,v;
u=pq.top().second;
du=pq.top().first;
pq.pop();
// cout<<u<<"\n";
if(du!=dis[u]) continue;
// Because you may be push into priority queue vertex u a few times so this guaranteed this is the shortest path from 1 to u at this time
for(int i=0;i<a[u].size();i++)
{
v=a[u][i].second;
w=a[u][i].first;
//cout<<v<<" "<<dis[v]<<" "<<du+w<<"\n";
if(du+w<dis[v])
{
dis[v]=du+w;
trace[v]=u;
pq.push(pi(dis[v],v));
}
}
//cout<<u<<"\n";
}
}
void _trace(int x)
{
printf("%d ",x);
if(x==1)
return;
_trace(trace[x]);
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++)
{
int x,y,w;
scanf("%d %d %d",&x,&y,&w);
a[x].push_back(pi(w,y));
a[y].push_back(pi(w,x));
}
// cout<<a[1].size()<<"\n";
dijkstra();
for(int i=1;i<=n;i++)
{
if(dis[i]!=oo)
{
printf("The shortest path from 1 to %d is: %d\n",i,dis[i]);
printf("And this is the shortest path from %d to 1: ",i);
_trace(i);
printf("\n");
}
else
{
printf("There is no shortest path from 1 to %d\n",i);
}
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBOIDEwMDAxMAp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIHBhaXI8aW50LGludD4gcGk7CnZlY3RvcjxwaT4gYVtOXTsKaW50IG9vPTFlOSs3OwppbnQgZGlzW05dOwppbnQgdHJhY2VbTl07CmludCBuLG07CnZvaWQgZGlqa3N0cmEoKQp7CiAgICBwcmlvcml0eV9xdWV1ZTxwaSx2ZWN0b3I8cGk+LGdyZWF0ZXI8cGk+ID5wcTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKQogICAgICAgIGRpc1tpXT0xMDAwMDAwMDA3OwogICAgZGlzWzFdPTA7CiAgICBwcS5wdXNoKHBpKDAsMSkpOwogICAgd2hpbGUocHEuc2l6ZSgpKQogICAgewogICAgICAgIGludCB1LGR1LHcsdjsKICAgICAgICB1PXBxLnRvcCgpLnNlY29uZDsKICAgICAgICBkdT1wcS50b3AoKS5maXJzdDsKICAgICAgICBwcS5wb3AoKTsKICAgICAgIC8vIGNvdXQ8PHU8PCJcbiI7CiAgICAgICAgaWYoZHUhPWRpc1t1XSkgY29udGludWU7CiAgICAgICAgLy8gQmVjYXVzZSB5b3UgbWF5IGJlIHB1c2ggaW50byBwcmlvcml0eSBxdWV1ZSB2ZXJ0ZXggdSBhIGZldyB0aW1lcyBzbyB0aGlzIGd1YXJhbnRlZWQgdGhpcyBpcyB0aGUgc2hvcnRlc3QgcGF0aCBmcm9tIDEgdG8gdSBhdCB0aGlzIHRpbWUKICAgICAgICBmb3IoaW50IGk9MDtpPGFbdV0uc2l6ZSgpO2krKykKICAgICAgICB7CiAgICAgICAgICAgIHY9YVt1XVtpXS5zZWNvbmQ7CiAgICAgICAgICAgIHc9YVt1XVtpXS5maXJzdDsKICAgICAgICAgICAgLy9jb3V0PDx2PDwiICI8PGRpc1t2XTw8IiAiPDxkdSt3PDwiXG4iOwogICAgICAgICAgICBpZihkdSt3PGRpc1t2XSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGlzW3ZdPWR1K3c7CiAgICAgICAgICAgICAgICB0cmFjZVt2XT11OwogICAgICAgICAgICAgICAgcHEucHVzaChwaShkaXNbdl0sdikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vY291dDw8dTw8IlxuIjsKICAgIH0KfQp2b2lkIF90cmFjZShpbnQgeCkKewogICAgcHJpbnRmKCIlZCAiLHgpOwogICAgaWYoeD09MSkKICAgICAgICByZXR1cm47CiAgICBfdHJhY2UodHJhY2VbeF0pOwp9CmludCBtYWluKCkKewogICAgc2NhbmYoIiVkICVkIiwmbiwmbSk7CiAgICBmb3IoaW50IGk9MTtpPD1tO2krKykKICAgIHsKICAgICAgICBpbnQgeCx5LHc7CiAgICAgICAgc2NhbmYoIiVkICVkICVkIiwmeCwmeSwmdyk7CiAgICAgICAgYVt4XS5wdXNoX2JhY2socGkodyx5KSk7CiAgICAgICAgYVt5XS5wdXNoX2JhY2socGkodyx4KSk7CiAgICB9CiAgIC8vIGNvdXQ8PGFbMV0uc2l6ZSgpPDwiXG4iOwogICAgZGlqa3N0cmEoKTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKQogICAgewogICAgICAgIGlmKGRpc1tpXSE9b28pCiAgICAgICAgewogICAgICAgIHByaW50ZigiVGhlIHNob3J0ZXN0IHBhdGggZnJvbSAxIHRvICVkIGlzOiAlZFxuIixpLGRpc1tpXSk7CiAgICAgICAgcHJpbnRmKCJBbmQgdGhpcyBpcyB0aGUgc2hvcnRlc3QgcGF0aCBmcm9tICVkIHRvIDE6ICIsaSk7CiAgICAgICAgX3RyYWNlKGkpOwogICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICBwcmludGYoIlRoZXJlIGlzIG5vIHNob3J0ZXN0IHBhdGggZnJvbSAxIHRvICVkXG4iLGkpOwogICAgICAgIH0KCiAgICB9Cn0KCg==