constint N = 12, M = 1 << 12; int f[M][M], g[N][M], n, m, nxt[M], w[N][N], lg[M];
intmain(){ memset(w, 0x3f, sizeof w); memset(g, 0x3f, sizeof g); scanf("%d %d", &n, &m); for (int i = 0; i < n; i++) lg[1 << i] = i; for (int i = 1; i <= m; i++) { int u, v, val; scanf("%d %d %d", &u, &v, &val); u--, v--; if (val < w[u][v]) w[u][v] = w[v][u] = val; } int S = (1 << n) - 1; for (int i = 1; i <= S; i++) { int bu = S ^ i, v = 0; for (int j = bu; j; j = (j - 1) & bu) nxt[j] = v, v = j; for (int j = v; j; j = nxt[j]) { v = 1e6; int x = lg[j & -j]; for (int k = 0; k < n; k++) if (i & (1 << k)) v = min(v, w[k][x]); f[i][j] = f[i][j ^ (j & -j)] + v; } } for (int i = 0; i < n; i++) g[0][1 << i] = 0; for (int l = 1; l < n; l++) for (int i = 1; i <= S; i++) for (int j = i; j; j = (j - 1) & i) { g[l][i] = min(g[l][i], g[l - 1][i ^ j] + l * f[i ^ j][j]); } int res = 1e9; for (int i = 0; i < n; i++) res = min(res, g[i][S]); printf("%d\n", res); return0; }