#include using namespace std; #define int long long int vx[4010],nx[4010],to[4010],hd[2010],ed; int t,n,m,d[2010]; bitset<2010> vis; struct nd{ int x,i; nd(int _x = 0,int _i = 0){ x = _x,i = _i; } bool operator<(const nd &p)const{ return x < p.x; } }; priority_queue q; void ad(int x,int y,int z){ nx[++ed] = hd[x]; hd[x] = ed; to[ed] = y; vx[ed] = z; return ; } inline int dj(int ss,int tt){ for(int i = 1;i <= n;++i) d[i] = 1e15 + 7,vis[i] = false; d[ss] = 0; q.push(nd(0,ss)); while(!q.empty()){ int u = q.top().i; q.pop(); if(vis[u])continue; vis[u] = true; for(int i = hd[u];i;i = nx[i]){ int y = to[i],v = vx[i]; if(d[y] > d[u] + v){ d[y] = d[u] + v; if(!vis[y])q.push(nd(d[y],y)); } } } return d[tt]; } signed main(){ // freopen("a.in","r",stdin); // freopen("a.out","w",stdout); ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>t>>n>>m; ed = 1; for(int i = 1;i <= m;++i){ int x,y,z; cin>>x>>y>>z; ad(x,y,z); if(!t)ad(y,x,z); } int num = 1e15 + 7; for(int i = 1;i <= n;++i) for(int j = hd[i];j;j = nx[j]){ int y = to[j],vv = vx[j]; vx[j] = 1e15 + 7; if(!t)vx[j ^ 1] = 1e15 + 7; num = min(num,vv + dj(y,i)); vx[j] = vv; if(!t)vx[j ^ 1] = vv; } if(num == 1e15 + 7){ cout<<"-1"; return 0; } cout<