from math import lcm, gcd from heapq import heappush, heappop def main(): N,M=map(int,input().split()) edges=[] l=1 for i in range(M): u,v,a,b=map(int,input().split()) u-=1 v-=1 edges.append((u,v,a,b)) l=lcm(l,b) G=[[]for i in range(N)] for i in range(M): u,v,a,b=edges[i] c=a*l//b G[u].append((v,c)) G[v].append((u,c)) que=[] que.append((0,0)) INF=float("inf") ans=[INF]*N ans[0]=0 while que: c,now=heappop(que) # if ans[now]ans[now]+cost: ans[to]=ans[now]+cost heappush(que,(ans[to],to)) for i in range(1,N): g=gcd(ans[i],l) print(ans[i]//g,l//g) return if __name__=="__main__": main()