import heapq n, m = map(int, [input(), input()]) graph = [[] for _ in range(n+1)] for _ in range(m) : u, v, w = map(int, input().split()) graph[u].append((v,w)) start, end = map(int, input().split()) inf = float("inf") distance = [inf for _ in range(n+1)] distance[start] = 0 prevNode = [0]*(n+1) heap = [] heapq.heappush(heap, (0, start)) while len(heap) != 0 : cur_dist, now = heapq.heappop(heap) if distance[now] < cur_dist : continue for Next in graph[now] : next, nw = Next if distance[next] > distance[now] + nw : distance[next] = distance[now] + nw heapq.heappush(heap, (distance[next], next)) prevNode[next] = now channel = [end] ptr = end while ptr != start : ptr = prevNode[ptr] channel.append(ptr) channel.reverse() print(distance[end]) print(len(channel)) print(*channel)