from heapq import heappush, heappop
while True:
n, m = map(int, input().split())
if n == 0 and m == 0:
break
graph = [[] for _ in range(n + 1)]
for _ in range(m):
a, b, d, p = map(int, input().split())
graph[a].append([b, d, p])
graph[b].append([a, d, p])
s, t = map(int, input().split())
minDist, minCost = [float("inf")] * (n + 1), [float("inf")] * (n + 1)
minDist[s] = 0
minCost[s] = 0
pq = [(0, 0, s)]
while pq:
dist, cost, node = heappop(pq)
if dist > minDist[node]:
continue
for next in graph[node]:
to = next[0]
new_dist = minDist[node] + next[1]
new_cost = minCost[node] + next[2]
if minDist[to] > new_dist:
minDist[to] = new_dist
minCost[to] = new_cost
heappush(pq, (new_dist, new_cost, to))
elif minDist[to] == new_dist and minCost[to] > new_cost:
minCost[to] = new_cost
heappush(pq, (new_dist, new_cost, to))
print(minDist[t], minCost[t])