voidsolve( ){ int n = read( ), m = read( ); int N = 1 << n;
for( int i = 0; i < n; ++ i ) { for( int j = 0; j < n; ++ j ) { mat[i][j] = i == j ? 0 : inf; } }
for( int i = 1; i <= m; ++ i ) { int u = read( ) - 1, v = read( ) - 1; ll w = read( ); mat[u][v] = min( mat[u][v], w ); mat[v][u] = min( mat[v][u], w ); }
for( int d = 1; d <= n; ++ d ) { for( int mask = 0; mask < N; ++ mask ) { f[d][mask] = inf; } }
for( int i = 0; i < n; ++ i ) { f[1][1 << i] = 0; }
for( int d = 1; d < n; ++ d ) { for( int mask = 1; mask < N; ++ mask ) { if( f[d][mask] == inf ) continue;
int rem = (N - 1) ^ mask;
for( int sub = rem; sub; sub = (sub - 1) & rem ) { ll cost = 0; bool ok = 1; for( int v = 0; v < n; ++ v ) { if( !( sub & (1 << v) ) ) continue; ll res = inf; for( int u = 0; u < n; ++ u ) { if( !( mask & (1 << u ) ) ) continue; res = min( res, mat[u][v] ); } if( res == inf ) { ok = 0; break; } cost += res; } if( ok == 0 ) continue; int nxt = mask | sub; f[d + 1][nxt] = min( f[d+1][nxt], f[d][mask] + 1ll * d * cost ); } } }
ll ans = inf; for( int d = 1; d <= n; ++ d ) { ans = min( ans, f[d][N - 1] ); } cout << ans << '\n'; }