#include<bits/stdc++.h>
using namespace std;
const long long INF=1e13;
long long a[310][310],dis[310][310];
long long n,m,ans=INF;
int main(){
cin>>n>>m;
memset(dis,0x3f3f3f,sizeof(dis));
memset(a,0x3f3f3f,sizeof(a));
for (int i=0;i<=n+5;i++){
a[i][i]=0;
dis[i][i]=0;
}
for (int i=1;i<=m;i++){
long long x,y,z;
cin>>x>>y>>z;
a[x][y]=a[y][x]=min(a[x][y],z);
dis[x][y]=dis[y][x]=a[x][y];
}
for (int k=1;k<=n;k++){
//计算最小环
for (int i=1;i<k;i++){//因为是计算编号数小于等于k-1的结点,所以是i<k
for (int j=i+1;j<k;j++){
ans=min(dis[i][j]+a[i][k]+a[k][j],ans);
}
}
//计算Floyd
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
if (ans==INF)cout<<"No solution.";
else cout<<ans;
return 0;
}
求调