import sys from collections import deque def main(): input = sys.stdin.read().split() idx = 0 N = int(input[idx]); idx +=1 M = int(input[idx]); idx +=1 edges = [] weights = set() for _ in range(M): u = int(input[idx]); idx +=1 v = int(input[idx]); idx +=1 w = int(input[idx]); idx +=1 edges.append((u, v, w)) weights.add(w) weights = sorted(weights) adj = [[] for _ in range(N+1)] for u, v, w in edges: adj[u].append((v, w)) answers = [-1] * (N-1) for x in weights: new_edges = [] for u, v, w in edges: if w <= x: new_edges.append((u, v, 1)) else: new_edges.append((u, v, -1)) dist = [-float('inf')] * (N+1) dist[1] = 0 for _ in range(N-1): updated = False for u, v, w in new_edges: if dist[u] != -float('inf') and dist[v] < dist[u] + w: dist[v] = dist[u] + w updated = True if not updated: break in_cycle = set() for u, v, w in new_edges: if dist[u] != -float('inf') and dist[v] < dist[u] + w: in_cycle.add(v) visited = set() q = deque() for node in in_cycle: q.append(node) visited.add(node) while q: u = q.popleft() for v, _ in adj[u]: if v not in visited: visited.add(v) q.append(v) for i in range(2, N+1): if answers[i-2] == -1 and (dist[i] >= 0 or i in visited): answers[i-2] = x for ans in answers: print(ans) if __name__ == '__main__': main()