EduBrick

B. Сам кратчайший путь

3000 мс · 256 МБ · всё или ничего

Дан неориентированный взвешенный граф. Найдите кратчайший путь между вершинами ss и tt: его вес, количество вершин и сами вершины.

Путей минимального веса может быть несколько; выведите лексикографически наименьшую последовательность номеров вершин.

Приём тот же, что был в занятии по обходу в ширину: запустить Дейкстру из финиша, а потом идти от старта, каждый раз выбирая наименьшего соседа uu, для которого

dist[u]+w(v,u)=dist[v].\mathrm{dist}[u] + w(v, u) = \mathrm{dist}[v].

Такой сосед всегда есть, если вершина достижима, и шаг к нему оставляет путь кратчайшим. Массив предков тут не нужен вовсе.

Тонкость с кратными рёбрами: между парой вершин их может быть несколько, и в проверке участвует наименьший из весов.

Веса здесь строго положительны, и это существенно. При нулевых весах рёбра, удовлетворяющие равенству, могут образовать цикл из вершин с одинаковым расстоянием, и жадный спуск в нём зациклится.

Формат ввода

Первая строка содержит числа nn (1≤n≤1051 \le n \le 10^5) и mm (0≤m≤2⋅1050 \le m \le 2 \cdot 10^5).

Вторая строка содержит различные ss и tt.

Далее идут mm строк с рёбрами: концы и вес ww (1≤w≤1041 \le w \le 10^4).

Формат вывода

Если пути нет — одно число −1-1.

Иначе в первой строке вес пути, во второй — количество вершин kk, в третьей — kk номеров.

Примеры

ввод
4 4
1 3
1 2 1
2 3 2
3 4 5
4 1 4
вывод
3
3
1 2 3
ввод
2 0
1 2
вывод
-1
Войдите, чтобы отправлять решения.