#include #define int long long using namespace std; const int N=2e3+10; int T,ans=1e18,n,m; struct node{ int u,t; bool operator <(const node &a)const{ return t(const node &a)const{ return t>a.t; } }; vectorv[N]; int d[N][N],dis[N],mp[N]; priority_queue,greater >q; void dij(int st){ while(!q.empty()) q.pop(); for(int i=1;i<=n;i++){ dis[i]=1e15; mp[i]=0; } dis[st]=0; q.push({st,0}); while(!q.empty()){ node si=q.top(); q.pop(); if(mp[si.u]==1)continue; mp[si.u]=1; for(int j:v[si.u]){ if(d[si.u][j]==0) continue; int val=d[si.u][j]; if(dis[si.u]+val>T; cin>>n>>m; for(int i=1;i<=m;i++){ int u,w,t; cin>>u>>w>>t; if(T==0){ d[u][w]=d[w][u]=t; v[u].push_back(w); v[w].push_back(u); } else{ v[u].push_back(w); d[u][w]=t; } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(d[i][j]!=0){ int p=d[j][i],qq=d[i][j]; d[j][i]=d[i][j]=0; dij(j); ans=min(ans,dis[i]+qq); d[j][i]=p,d[i][j]=qq; } } } if(ans>1e14) cout<<-1; else cout<