#include <bits/stdc++.h>
using namespace std;
const int NMAX = 18;
const int INF = 1e9;
int cost[NMAX + 1][NMAX + 1];
int dp[NMAX][(1 << NMAX)];
int main() {
ifstream fin( "hamilton.in" );
ofstream fout( "hamilton.out" );
int n, m;
fin >> n >> m;
for ( int i = 0; i < n; i ++ ) {
for ( int j = 0; j < n; j ++ ) {
cost[i][j] = INF;
}
cost[i][i] = 0;
}
for ( int i = 1, a, b, c; i <= m; i ++ ) {
fin >> a >> b >> c;
cost[a][b] = min( cost[a][b], c );
}
for ( int i = 0; i < n; i ++ ) {
for ( int j = 0; j < (1 << n); j ++ ) {
dp[i][j] = INF;
}
}
for ( int i = 0; i < n; i ++ ) {
dp[i][1 << i] = cost[0][i];
}
for ( int mask = 2; mask < (1 << n); mask ++ ) {
for ( int last = 0; last < n; last ++ ) {
if ( (1 << last) & mask ) {
for ( int prv = 0; prv < n; prv ++ ) {
dp[last][mask] = min( dp[last][mask], dp[prv][mask ^ (1 << last)] + cost[prv][last] );
}
}
}
}
int ans = dp[0][(1 << n) - 1];
if ( ans == INF ) {
fout << "Nu exista solutie\n";
} else {
fout << ans << '\n';
}
return 0;
}