defsolve(): N, M = map(int, input().split()) dist = [[float("inf")] * N for _ inrange(N)] for u inrange(N): dist[u][u] = 0
for _ inrange(M): u, v, w = map(int, input().split()) u, v = u - 1, v - 1 if w < dist[u][v]: dist[u][v] = w dist[v][u] = w
# Floyd-Warshall for k inrange(N): for u inrange(N): if dist[u][k] == float("inf"): continue for v inrange(N): dist[u][v] = min(dist[u][v], dist[u][k] + dist[k][v])
ifany(dist[0][u] == float("inf") for u inrange(N)): print(-1) return
U = (1 << N) - 1
@cache defdfs(u, s): if s == U: return dist[u][0]
res = float("inf") for v inrange(N): if s & (1 << v): continue res = min(res, dist[u][v] + dfs(v, s | (1 << v))) return res