N = gets.to_i M = gets.to_i E = Hash.new { |h, k| h[k] = {} } visited_counter = Array.new(N + 1, 0) M.times do u, c, v = gets.split.map(&:to_i) visited_counter[u] += 1 E[v][u] = c end need_ing = Array.new(N + 1, 0) need_ing[N] = 1 visited_counter[N] = 1 queue = [] queue << [N, 1] until queue.empty? u, b = queue.shift visited_counter[u] -= 1 need_ing[u] += b # next if visited_counter[u] > 0 E[u].each do |v, cnt| queue << [v, cnt * b] end end 1.upto(N - 1) do |v| if E[v].size == 0 puts need_ing[v] else # puts need_ing[v] puts 0 end end