1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #define INF 100000000
5 using namespace std;
6 int n,m;
7 int map[1000][1000],dis[1000][1000];
8 int main()
9 {
10 while((scanf("%d%d",&n,&m))==2)
11 {
12 for(int i=1;i<=n;i++)
13 for(int j=1;j<=n;j++)
14 map[i][j]=INF,dis[i][j]=INF;
15 for(int i=1;i<=m;i++)
16 {
17 int x,y,z;
18 cin>>x>>y>>z;
19 if(map[x][y]>z)
20 map[x][y]=map[y][x]=z,dis[x][y]=dis[y][x]=z;
21 }
22
23 int minn=INF;
24 for(int k=1;k<=n;k++)// Floyed
25 {
26 for(int i=1;i<=k-1;i++)
27 for(int j=i+1;j<=k-1;j++)
28 minn=min(minn,dis[i][j]+map[j][k]+map[k][i]);
29 for(int i=1;i<=n;i++)
30 for(int j=1;j<=n;j++)
31 if(dis[i][j]>dis[i][k]+dis[k][j])
32 dis[i][j]=dis[i][k]+dis[k][j];
33 }
34 if(minn!=INF)
35 printf("%d\n",minn);
36 else printf("No solution.\n");
37 }
38 return 0;
39 }