#!/usr/bin/env python3 import sys import heapq from math import gcd def solve() -> None: input = sys.stdin.buffer.readline n, m = map(int, input().split()) edges = [] common_denominator = 1 for _ in range(m): u, v, a, b = map(int, input().split()) u -= 1 v -= 1 edges.append((u, v, a, b)) common_denominator = ( common_denominator // gcd(common_denominator, b) * b ) graph = [[] for _ in range(n)] for u, v, a, b in edges: # a / b を common_denominator 倍して整数化する weight = a * (common_denominator // b) graph[u].append((v, weight)) graph[v].append((u, weight)) dist = [None] * n dist[0] = 0 priority_queue = [(0, 0)] while priority_queue: current_dist, vertex = heapq.heappop(priority_queue) if current_dist != dist[vertex]: continue for next_vertex, weight in graph[vertex]: next_dist = current_dist + weight if dist[next_vertex] is None or next_dist < dist[next_vertex]: dist[next_vertex] = next_dist heapq.heappush( priority_queue, (next_dist, next_vertex), ) output = [] for vertex in range(1, n): numerator = dist[vertex] divisor = gcd(numerator, common_denominator) output.append( f"{numerator // divisor} " f"{common_denominator // divisor}" ) sys.stdout.write("\n".join(output)) if output: sys.stdout.write("\n") if __name__ == "__main__": solve()