import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Queue; public class No1473 { public static int n; public static ArrayList[] tdLists; public static void main(String[] args) throws IOException { String[] readStrings = readStr(); n = Integer.parseInt(readStrings[0].split(" ")[0]); int m = Integer.parseInt(readStrings[0].split(" ")[1]); tdLists = new ArrayList[m+1]; int[] dlist = new int[m]; int s , t , d; for(int i = 1;i <= m;i++) { s = Integer.parseInt(readStrings[i].split(" ")[0]); t = Integer.parseInt(readStrings[i].split(" ")[1]); d = Integer.parseInt(readStrings[i].split(" ")[2]); 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; } 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 String[] readStr() throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ArrayList list = new ArrayList<>(); do { list.add(br.readLine()); }while(br.ready()); br.close(); String[] text = new String[list.size()]; list.toArray(text); return text; } 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; } } }