#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> using namespace std; int f[13][8000],g[13][8000]; int mep[13][13]; int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); if(mep[a][b]!=0) mep[a][b]=min(mep[a][b],c); else mep[a][b]=c; mep[b][a]=mep[a][b]; } memset(f,60,sizeof(f)); for(int i=1;i<=n;i++) {f[i][(1<<(i-1))]=0;} for(int i=1;i<(1<<n);i++) { for(int j=1;j<=n;j++) { if(((1<<(j-1))|i)==i) { for(int k=1;k<i;k++) { if((k|i)==i&&(((1<<(j-1))|(i-k))==(i-k))) { for(int a=1;a<=n;a++) { if(((1<<(a-1))|k)==k) { if(mep[a][j]!=0) { //if(i==3&&j==1) {cout<<g[a][k]<<f[j][i-k]<<f[a][k]<<endl;return 0;} if(f[j][i]>f[j][i-k]+f[a][k]+g[a][k]+mep[j][a]) { f[j][i]=f[j][i-k]+f[a][k]+g[a][k]+mep[j][a]; g[j][i]=g[j][i-k]+g[a][k]+mep[j][a]; //cout<<j<<" "<<i-k<<" "<<f[j][i-k]<<endl; //cout<<a<<" "<<k<<" "<<f[a][k]<<endl; //cout<<j<<" "<<i<<" "<<f[j][i]<<endl; } } } } } } } } } int ans=2147483233; for(int i=1;i<=n;i++) ans=min(ans,f[i][(1<<n)-1]); cout<<ans; }