#include<bits/stdc++.h>
using namespace std;

const long long MaxN=1e5+5;

long long n,m;
vector<pair<long long,long long>> arr[MaxN];
long long dis[MaxN];

void bfs(long long x, vector<pair<long long,long long>> arr[], bool visited[], long long dis[])
{
    for(long long i=1; i<=n; i++)
    {
        visited[i]=false;
        dis[i]=0;
    }

    queue<long long> qu;

    qu.push(x);
    visited[x]=true;

    while(!qu.empty())
    {
        long long u=qu.front();
        qu.pop();

        for(auto fi:arr[u])
        {
            long long v=fi.first;

            if(!visited[v])
            {
                visited[v]=true;
                dis[v]=dis[u]+1;
                qu.push(v);
            }
        }
    }
}

void bfs(long long x, vector<pair<long long,long long>> arr[], bool visited[], vector<long long> &ans)
{
    queue<long long> qu;
    qu.push(x);

    while(!qu.empty())
    {
        long long sz=qu.size();
        long long mn=LLONG_MAX;

        for(long long i=1; i<=sz; i++)
        {
            long long u=qu.front();
            qu.pop();

            if(u==n)
            {
                return;
            }

            for(auto fi:arr[u])
            {
                long long v=fi.first;
                long long w=fi.second;

                if(dis[v]==dis[u]-1)
                {
                    mn=min(mn,w);
                }
            }

            qu.push(u);
        }

        if(mn==LLONG_MAX)
        {
            return;
        }

        ans.push_back(mn);

        for(long long i=1; i<=sz; i++)
        {
            long long u=qu.front();
            qu.pop();

            for(auto fi:arr[u])
            {
                long long v=fi.first;
                long long w=fi.second;

                if(dis[v]==dis[u]-1 && w==mn)
                {
                    qu.push(v);
                }
            }
        }
    }
}

void input()
{
    cin>>n>>m;

    for(long long i=1; i<=m; i++)
    {
        long long u,v,w;

        cin>>u>>v>>w;

        arr[u].push_back({v,w});
        arr[v].push_back({u,w});
    }
}

void solve()
{
    bool visited[MaxN];
    vector<long long> ans;

    bfs(n,arr,visited,dis);

    bfs(1,arr,visited,ans);

    cout<<dis[1]<<'\n';

    for(long long x:ans)
    {
        cout<<x<<' ';
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    input();
    solve();
}