if let n = Int(readLine() ?? ""), let m = Int(readLine() ?? "") { var graph: [[(v: Int, w: Int)]] = Array(repeating: [], count: n+1) for _ in 0.. distance[current.now] + next.w { distance[next.v] = distance[current.now] + next.w prev[next.v] = current.now qu.append((now: next.v, distance: distance[next.v])) } } } var path: [Int] = [] path.append(end) while true { let temp = path[path.count-1] if prev[temp] == 0 { break } path.append(prev[temp]) } path.reverse() print(distance[end]) print(path.count) print(path.map({String($0)}).joined(separator: " ")) } }