program prison; const maxn=20000; maxm=100000; var n,m:longint; f,s:array[0..maxn+1] of longint; a,b,c:array[0..maxm+1] of longint; function findsets(k:longint):longint; var y:longint; begin if f[k]<>k then begin y:=f[k]; f[k]:=findsets(y); s[k]:=(s[k]+s[y]) mod 2; end; exit(f[k]); end; procedure combinesets(a,b:longint); begin s[f[a]]:=(s[a]+1) mod 2; f[f[a]]:=b; end; procedure work; var i,sa,sb:longint; begin for i:=m downto 1 do begin sa:=findsets(a[i]); sb:=findsets(b[i]); if sa=sb then begin if s[a[i]]=s[b[i]] then begin writeln(c[i]); exit; end; end else combinesets(a[i],b[i]); end; writeln(0); end; procedure qsort(l,r:longint); var i,j,x,y:longint; begin i:=l; j:=r; x:=c[(l+r) div 2]; repeat while c[i]<x do inc(i); while c[j]>x do dec(j); if not (i>j) then begin y:=a[i]; a[i]:=a[j]; a[j]:=y; y:=b[i]; b[i]:=b[j]; b[j]:=y; y:=c[i]; c[i]:=c[j]; c[j]:=y; inc(i); dec(j); end; until i>j; if j>l then qsort(l,j); if i<r then qsort(i,r); end; procedure makesets; var i:longint; begin for i:=1 to n do f[i]:=i; end; procedure reads; var i:longint; begin readln(n,m); makesets; for i:=1 to m do readln(a[i],b[i],c[i]); end; begin //assign(input,'prison.in'); //reset(input); //assign(output,'prison.out'); //rewrite(output); reads; qsort(1,m); work; //close(input); //close(output); end. /************************************************************** Problem: 2298 User: admin Language: Pascal Result: Wrong Answer ****************************************************************/