#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const double eps = 1e-6;
const double pi = acos(-1.0);
const int MAX_STATE = pow(3, 10);
int G[10][10];
int dp[MAX_STATE][10];
int add[10];
void init_add()
{
int p = 1;
for(int i = 0; i < 10; i++, p *= 3)
{
add[i] = p;
}
}
int get_digit(int state, int digit)
{
for(int i = 0; i < digit; i++)
{
state /= 3;
}
return state % 3;
}
int main()
{
int n, m;
init_add();
while(scanf("%d%d", &n, &m) != EOF)
{
memset(G, 0x3f, sizeof(G));
memset(dp, 0x3f, sizeof(dp));
while(m--)
{
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
G[u - 1][v - 1] = G[v - 1][u - 1] = min(G[u - 1][v - 1], w);
}
int p = 1;
for(int i = 0; i < n; i++, p *= 3)
{
dp[p][i] = 0;
}
int ans = INF;
int state = 1;
for(int i = 0; i < n; i++)
{
state *= 3;
}
for(int i = 0; i < state; i++)
{
int cnt = 0;
for(int j = 0; j < n; j++)
{
if(get_digit(i, j) == 0) continue;
cnt++;
for(int k = 0; k < n; k++)
{
if(j == k) continue;
if(get_digit(i, k) < 2)
{
dp[i + add[k]][k] = min(dp[i + add[k]][k], dp[i][j] + G[j][k]);
}
}
}
if(cnt == n)
{
for(int j = 0; j < n; j++)
{
ans = min(ans, dp[i][j]);
}
}
}
printf("%d\n", ans == INF ? -1 : ans);
}
return 0;
}