#include<bits/stdc++.h>

using namespace std;

const int INF=1e9+10;


int main()
{
    int V,E;
    ios::sync_with_stdio(false);
    cin.tie(0);
    while(cin>>V>>E)
    {
        vector<vector<int> > mat(20,vector<int>(20));
        vector<vector<int> > dp(1<<V,vector<int>(V));
        for(int i=0;i<mat.size();i++)
        {
            fill(mat[i].begin(),mat[i].end(),INF);
        }
        for(int i=0;i<E;i++)
        {
            int s,t,d;
            cin>>s>>t>>d;
            mat[s][t]=d;

        }
        for(int i=0;i<dp.size();i++)
        {
            fill(dp[i].begin(),dp[i].end(),INF);
        }
        dp[0][0]=0;
        for(int i=0;i<(1<<V);i++)
        {
            for(int j=0;j<V;j++)
            {
                for(int k=0;k<V;k++)
                {
                    if(!(i>>k&1))
                    {
                        dp[i^(1<<k)][k]=min(dp[i][j]+mat[j][k],dp[i^(1<<k)][k]);
                    }
                }
            }
        }
        cout<<(dp[(1<<V)-1][0]==INF?-1:dp[(1<<V)-1][0])<<endl;
    }

    return 0;
}

