import java.io.IOException; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Queue; import java.util.Scanner; public class No1473 { public static int n; public static ArrayList[] tdLists; public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); int m = scanner.nextInt(); tdLists = new ArrayList[m+1]; int[] dlist = new int[m]; int s , t , d; for(int i = 1;i <= m;i++) { s = scanner.nextInt(); t = scanner.nextInt(); d = scanner.nextInt(); if(tdLists[s] == null) { tdLists[s] = new ArrayList(); } if(tdLists[t] == null ) { tdLists[t] = new ArrayList(); } tdLists[s].add(new tdMap(t, d)); tdLists[t].add(new tdMap(s, d)); dlist[i-1] = d; } scanner.close(); Arrays.sort(dlist); int a = 0 , b = dlist.length-1 , h = (a+b)/2 , ans = 0; while(true) { ans = rootcount(dlist[h]); if(ans == 0) { dlist[h] = 0; b = h-1; h = (a+b)/2; }else { if(h + 1 == m || dlist[h+1] == 0) { break; }else { a = h+1; h = (a+b)/2; } } } System.out.println(dlist[h] + " " + rootcount(dlist[h])); } public static int rootcount(int w) { int[] root = new int[n+1]; Queue queue = new ArrayDeque(); ArrayList arrayList; queue.add(1); int s = 0; while(!queue.isEmpty()) { s = queue.poll(); arrayList = tdLists[s]; if(arrayList == null) { System.out.println("Empty"); continue; } for (tdMap tdMap : arrayList) { if(w <= tdMap.getd() && (root[tdMap.gett()] == 0 || root[tdMap.gett()] > root[s]+1)) { root[tdMap.gett()] = root[s] + 1; queue.add(tdMap.gett()); } } } return root[n]; } public static class tdMap{ int t , d; public tdMap(int t , int d) { this.t = t; this.d = d; } public int getd() { return this.d; } public int gett() { return this.t; } } }