Se știe că într-un graf neorientat conex, între oricare două vârfuri există cel putin un lanț iar lungimea unui lanț este egală cu numărul muchiilor care-l compun. Definim noțiunea lanț optim între două vârfuri X
și Y
ca fiind un lanț de lungime minimă care are ca extremități vârfurile X
și Y
. Este evident că între oricare două vârfuri ale unui graf conex vom avea unul sau mai multe lanțuri optime, depinzând de configurația grafului.
Cerința
Fiind dat un graf neorientat conex cu N
vârfuri etichetate cu numerele de ordine 1
, 2
, …, N
și două vârfuri ale sale notate X
și Y
(1 ≤ X, Y ≤ N
, X≠Y
), se cere să scrieți un program care determină vârfurile care aparțin tuturor lanțurilor optime dintre X
și Y
.
Date de intrare
Fișierul de intrare graf1.in
conține pe prima linie patru numere naturale reprezentând: N
(numărul de vârfuri ale grafului), M
(numărul de muchii), X
și Y
(cu semnificația din enunț). Pe următoarele M
linii câte două numere naturale nenule A[i], B[i]
(1 ≤ A[i], B[i] ≤ N
, A[i] ≠ B[i]
, pentru 1 ≤ i ≤ M
) fiecare dintre aceste perechi de numere reprezentând câte o muchie din graf.
Date de ieșire
Fișierul de ieșire graf1.out
va conține pe prima linie, numărul de vârfuri comune tuturor lanțurilor optime dintre X
și Y
; pe a doua linie, numerele corespunzătoare etichetelor acestor vârfuri, dispuse în ordine crescătoare; între două numere consecutive de pe această linie se va afla câte un spațiu.
Restricții și precizări
2 ≤ N ≤ 7500
1 ≤ M ≤ 14000
Exemplul 1:
graf1.in
6 7 1 4 1 2 1 3 1 6 2 5 3 5 5 6 5 4
graf1.out
3 1 4 5
Exemplul 2:
graf1.in
3 2 1 3 1 2 3 1
graf1.out
2 1 3