#include <stdio.h>          // printf(), scanf()

#define MAX_V 15
#define min(a, b) ((a) < (b) ? (a) : (b))

static const int INF = 1000000000;

int d[MAX_V][MAX_V];
int dp[1 << MAX_V][MAX_V];
int V;

int
rec(int S, int v)
{
	int u;

	if (dp[S][v] >= 0)
		return dp[S][v];

	if (S == (1 << V) - 1 && v == 0)
		return dp[S][v] = 0;

	int res = INF;
	for (u = 0; u < V; ++u)
	{
		if (!(S >> u & 1))
		{
			int t = rec(S | 1 << u, u) + d[v][u];
			res = min(res, t);
		}
	}

	return dp[S][v] = res;
}

int
main(int argc, char** argv)
{
	int E;
	int s, t, c;
	int i, j;

	scanf("%d %d", &V, &E);
	for (i = 0; i < V; ++i)
	{
		for (j = 0; j < V; ++j)
		{
			if (i == j)
				d[i][j] = 0;
			else
				d[i][j] = INF;
		}
	}

	for (i = 0; i < E; ++i)
	{
		scanf("%d %d %d", &s, &t, &c);
		d[s][t] = c;
	}

	for (i = 0; i < 1 << V; ++i)
	{
		for (j = 0; j < V; ++j)
			dp[i][j] = -1;
	}

	int res = rec(0, 0);
	if (res == INF)
		res = -1;

	printf("%d\n", res);
	return 0;
}