func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 16, inf = 2e8 + 10;   ;   int n, m, dis[maxn][maxn], deg[maxn], ans, dp[1024 * 33];   vector<int> veci;   void find(int a) {     int cnt = 0;     for (int i = 0; i < n; i++)       if ((a >> i) & 1) cnt++;     if (cnt % 2 == 1) return;     for (int i = 0; i < n; i++)       for (int j = 0; j < n; j++)         if (i != j && (a >> i) & 1 && (a >> j) & 1) {           int ki = a;           ki ^= (1 << i);           ki ^= (1 << j);           dp[a] = min(dp[a], dp[ki] + dis[veci[i]][veci[j]]);         }   }   int main() {     ios_base ::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     fill_n(dis[0], maxn * maxn, inf);     fill_n(dp, 1024 * 33, inf);     cin >> n >> m;     for (int i = 0; i < n; i++) dis[i][i] = 0;     for (int i = 0; i < m; i++) {       int u, v, w;       cin >> u >> v >> w;       u--, v--;       deg[u]++, deg[v]++;       ans += w;       dis[u][v] = dis[v][u] = min(dis[u][v], w);     }     for (int i = 0; i < n; i++)       for (int j = 0; j < n; j++)         for (int k = 0; k < n; k++)           dis[j][k] = min(dis[j][k], dis[j][i] + dis[i][k]);     for (int i = 0; i < n; i++)       if (deg[i] > 0 && dis[i][0] == inf)         return cout << -1, 0;       else if (deg[i] % 2 == 1)         veci.push_back(i);     dp[0] = 0;     for (int i = 0; i < (1 << (veci.size())); i++) find(i);     cout << ans + dp[(1 << (veci.size())) - 1];   }   