#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; using R = double; using Data = pair < ll, vector >; const ll MOD = 1e9 + 7; const ll inf = 1LL << 60; struct edge { ll from; ll to; ll cost; }; typedef tupleT; typedef pairpll; #define all(x) (x).begin(),(x).end() #define rep(i,m,n) for(ll i = m;i < n;++i) #define pb push_back #define fore(i,a) for(auto &i:a) #define rrep(i,m,n) for(ll i = m;i >= n;--i) #define INF INT_MAX/2 int N, M; vector>e[20]; int memo[1 << 14]; int dfs(int msk) { if (msk == 0)return 0; if (memo[msk] != -1)return memo[msk]; rep(i, 0, N){ if ((1 << i)&msk) { int temp = dfs(msk-(1<> N >> M; memset(memo, -1, sizeof(memo)); rep(i, 0, M) { int i1, i2, sc; cin >> i1 >> i2 >> sc; e[i2].pb({i1,sc}); } cout << dfs((1 << N) - 1) << endl; return 0; }