#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; using namespace atcoder; typedef long long ll; typedef pair P; struct unionfind{ vector par, sz; unionfind() {} unionfind(int n):par(n), sz(n, 1){ for(int i=0; isz[y]) swap(x, y); par[x]=y; sz[y]+=sz[x]; } bool same(int x, int y){ return find(x)==find(y); } int size(int x){ return sz[find(x)]; } }; int main() { int n; cin>>n; int m; cin>>m; int a[100010], b[100010], d[100010]; for(int i=0; i>a[i]>>b[i]>>d[i]; a[i]--; b[i]--; } int l=0, r=1e9; while(r-l>1){ int mid=(l+r)/2; unionfind uf(n); for(int i=0; i=mid) uf.unite(a[i], b[i]); } if(uf.same(0, n-1)) l=mid; else r=mid; } cout< que; que.push(0); vector g[100010]; for(int i=0; i=l){ g[a[i]].push_back(b[i]); g[b[i]].push_back(a[i]); } } while(!que.empty()){ int x=que.front(); que.pop(); for(auto y:g[x]){ if(e[y]>e[x]+1){ e[y]=e[x]+1; que.push(y); } } } cout<