#include <iostream>
#include <vector>
using namespace std;
int n,m,a,b,count = 0;
vector<vector<int> > graf; vector<int> ver; vector<int> family; bool ok = false; vector<int> ans; vector<bool> popa;
int bfs(int beg, int end){ // функция которая добавляет вершины в вектор вершин,которые мы просмотрим,и помечает их как уже проверенные
count++;
if(beg == end){
ok = true;
return 1;
}else{
for(int i = graf[beg].size() - 1;i >= 0;i--){
if(!popa[graf[beg][i]]){
ver.push_back(graf[beg][i]);
family.push_back(beg);
popa[graf[beg][i]] = true;
}
}
}
return 0;
}
int main() {
ios::sync_with_stdio(false);
cin >> n >> m;
cin >> a >> b;
for(int i = 0 ; i <= n; i++){ // создаем векто ввекторов
graf.push_back(ans);
popa.push_back(false);
}
ver.push_back(a);family.push_back(a);
for(int i = 0; i < m; i++){ //в вектор вершины добавляем те вершины,с которым она связанна
int x,y;
cin >> x >> y;
if(x != y){ // проверка на петлю
graf[x].push_back(y);
graf[y].push_back(x);
}
}
if(!graf[a].empty()){ //если вершины начала не изолированна
while(!ok && count < ver.size() ){ //цикл,пока мы не найдем конечную вершину,или если мы не прошли все вершины в векторе "плана"
if(bfs(ver[count],b)){ //если мы нашли выход,то начать восстанавливать пути
count--;// Нам надо начать с последней вершины,а это count - 1 вершина
int p = 1; //Новая переменная,которая нужна,для нахождения первого вхождения "отца" данной вершины
ans.push_back(b);//вектор ответа
while(ver[count] != a){ // пока не дошли до начальной вершины
while(ver[p] != family[count]){//двигаемся слева пройденных по вектору вершин плана,и ищем первое вхождение вершины ОТЦА
p++;
}
ans.push_back(ver[p]);//добавляем в ответ вершину,из которой мы попали в предыдущую (отца)
count = p;// теперь ищем отца отца и так далее,пока не дойдем до начальной вершины
p = 1;
}
}
}
if(ans.size() > 0){ // если вектор ответа не пуст(имеет хотябы одну вершины из пути)
cout << ans.size()-1 << endl;
for(int i = ans.size()-1; i >= 0; i--){
cout << ans[i] << " "; // выводим ответ справа на лево,так сказано в условии
}
}else{ // иначе -1
cout << "-1\n";
}
}else{//если начальная вершина изолирована,то сразу выводим -1
cout << "-1\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG4sbSxhLGIsY291bnQgPSAwOwp2ZWN0b3I8dmVjdG9yPGludD4gPiBncmFmOyB2ZWN0b3I8aW50PiB2ZXI7IHZlY3RvcjxpbnQ+IGZhbWlseTsgYm9vbCBvayA9IGZhbHNlOyB2ZWN0b3I8aW50PiBhbnM7IHZlY3Rvcjxib29sPiBwb3BhOwoKaW50IGJmcyhpbnQgYmVnLCBpbnQgZW5kKXsgLy8g0YTRg9C90LrRhtC40Y8g0LrQvtGC0L7RgNCw0Y8g0LTQvtCx0LDQstC70Y/QtdGCINCy0LXRgNGI0LjQvdGLINCyINCy0LXQutGC0L7RgCDQstC10YDRiNC40L0s0LrQvtGC0L7RgNGL0LUg0LzRiyDQv9GA0L7RgdC80L7RgtGA0LjQvCzQuCDQv9C+0LzQtdGH0LDQtdGCINC40YUg0LrQsNC6INGD0LbQtSDQv9GA0L7QstC10YDQtdC90L3Ri9C1Cgljb3VudCsrOwoJaWYoYmVnID09IGVuZCl7CgkJb2sgPSB0cnVlOwoJCXJldHVybiAxOwoJfWVsc2V7CgkJZm9yKGludCBpID0gZ3JhZltiZWddLnNpemUoKSAtIDE7aSA+PSAwO2ktLSl7CgkJCWlmKCFwb3BhW2dyYWZbYmVnXVtpXV0pewoJCQkJdmVyLnB1c2hfYmFjayhncmFmW2JlZ11baV0pOwoJCQkJZmFtaWx5LnB1c2hfYmFjayhiZWcpOwoJCQkJcG9wYVtncmFmW2JlZ11baV1dID0gdHJ1ZTsKCQkJfQoJCX0KCX0KCXJldHVybiAwOwp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKCWNpbiA+PiBuID4+IG07CgljaW4gPj4gYSA+PiBiOwoJZm9yKGludCBpID0gMCA7IGkgPD0gbjsgaSsrKXsgLy8g0YHQvtC30LTQsNC10Lwg0LLQtdC60YLQviDQstCy0LXQutGC0L7RgNC+0LIKCSAgICAgICAgZ3JhZi5wdXNoX2JhY2soYW5zKTsKCSAgICAgICAgcG9wYS5wdXNoX2JhY2soZmFsc2UpOwoJfQoJdmVyLnB1c2hfYmFjayhhKTtmYW1pbHkucHVzaF9iYWNrKGEpOwoJZm9yKGludCBpID0gMDsgaSA8IG07IGkrKyl7IC8v0LIg0LLQtdC60YLQvtGAINCy0LXRgNGI0LjQvdGLINC00L7QsdCw0LLQu9GP0LXQvCDRgtC1INCy0LXRgNGI0LjQvdGLLNGBINC60L7RgtC+0YDRi9C8INC+0L3QsCDRgdCy0Y/Qt9Cw0L3QvdCwIAoJCWludCB4LHk7CgkJY2luID4+IHggPj4geTsKCQlpZih4ICE9IHkpeyAvLyDQv9GA0L7QstC10YDQutCwINC90LAg0L/QtdGC0LvRjgoJCQlncmFmW3hdLnB1c2hfYmFjayh5KTsKCQkJZ3JhZlt5XS5wdXNoX2JhY2soeCk7CgkJfQoJfQoJaWYoIWdyYWZbYV0uZW1wdHkoKSl7IC8v0LXRgdC70Lgg0LLQtdGA0YjQuNC90Ysg0L3QsNGH0LDQu9CwINC90LUg0LjQt9C+0LvQuNGA0L7QstCw0L3QvdCwIAoJCXdoaWxlKCFvayAmJiBjb3VudCA8IHZlci5zaXplKCkgKXsgLy/RhtC40LrQuyzQv9C+0LrQsCDQvNGLINC90LUg0L3QsNC50LTQtdC8INC60L7QvdC10YfQvdGD0Y4g0LLQtdGA0YjQuNC90YMs0LjQu9C4INC10YHQu9C4INC80Ysg0L3QtSDQv9GA0L7RiNC70Lgg0LLRgdC1INCy0LXRgNGI0LjQvdGLINCyINCy0LXQutGC0L7RgNC1ICLQv9C70LDQvdCwIgoJCQlpZihiZnModmVyW2NvdW50XSxiKSl7IC8v0LXRgdC70Lgg0LzRiyDQvdCw0YjQu9C4INCy0YvRhdC+0LQs0YLQviDQvdCw0YfQsNGC0Ywg0LLQvtGB0YHRgtCw0L3QsNCy0LvQuNCy0LDRgtGMINC/0YPRgtC4CgkJCQljb3VudC0tOy8vINCd0LDQvCDQvdCw0LTQviDQvdCw0YfQsNGC0Ywg0YEg0L/QvtGB0LvQtdC00L3QtdC5INCy0LXRgNGI0LjQvdGLLNCwINGN0YLQviBjb3VudCAtIDEg0LLQtdGA0YjQuNC90LAKCQkJCWludCBwID0gMTsgLy/QndC+0LLQsNGPINC/0LXRgNC10LzQtdC90L3QsNGPLNC60L7RgtC+0YDQsNGPINC90YPQttC90LAs0LTQu9GPINC90LDRhdC+0LbQtNC10L3QuNGPINC/0LXRgNCy0L7Qs9C+INCy0YXQvtC20LTQtdC90LjRjyAi0L7RgtGG0LAiINC00LDQvdC90L7QuSDQstC10YDRiNC40L3RiwoJCQkJYW5zLnB1c2hfYmFjayhiKTsvL9Cy0LXQutGC0L7RgCDQvtGC0LLQtdGC0LAKCQkJCXdoaWxlKHZlcltjb3VudF0gIT0gYSl7IC8vINC/0L7QutCwINC90LUg0LTQvtGI0LvQuCDQtNC+INC90LDRh9Cw0LvRjNC90L7QuSDQstC10YDRiNC40L3RiwoJCQkJCXdoaWxlKHZlcltwXSAhPSBmYW1pbHlbY291bnRdKXsvL9C00LLQuNCz0LDQtdC80YHRjyDRgdC70LXQstCwINC/0YDQvtC50LTQtdC90L3Ri9GFINC/0L4g0LLQtdC60YLQvtGA0YMg0LLQtdGA0YjQuNC9INC/0LvQsNC90LAs0Lgg0LjRidC10Lwg0L/QtdGA0LLQvtC1INCy0YXQvtC20LTQtdC90LjQtSDQstC10YDRiNC40L3RiyDQntCi0KbQkAoJCQkJCQlwKys7CgkJCQkJfQoJCQkJCWFucy5wdXNoX2JhY2sodmVyW3BdKTsvL9C00L7QsdCw0LLQu9GP0LXQvCDQsiDQvtGC0LLQtdGCINCy0LXRgNGI0LjQvdGDLNC40Lcg0LrQvtGC0L7RgNC+0Lkg0LzRiyDQv9C+0L/QsNC70Lgg0LIg0L/RgNC10LTRi9C00YPRidGD0Y4gKNC+0YLRhtCwKQoJCQkJCWNvdW50ID0gcDsvLyDRgtC10L/QtdGA0Ywg0LjRidC10Lwg0L7RgtGG0LAg0L7RgtGG0LAg0Lgg0YLQsNC6INC00LDQu9C10LUs0L/QvtC60LAg0L3QtSDQtNC+0LnQtNC10Lwg0LTQviDQvdCw0YfQsNC70YzQvdC+0Lkg0LLQtdGA0YjQuNC90YsgCgkJCQkJcCA9IDE7CgkJCQl9CgkJCX0KCQl9CgkJaWYoYW5zLnNpemUoKSA+IDApeyAvLyDQtdGB0LvQuCDQstC10LrRgtC+0YAg0L7RgtCy0LXRgtCwINC90LUg0L/Rg9GB0YIo0LjQvNC10LXRgiDRhdC+0YLRj9Cx0Ysg0L7QtNC90YMg0LLQtdGA0YjQuNC90Ysg0LjQtyDQv9GD0YLQuCkKCQkJY291dCA8PCBhbnMuc2l6ZSgpLTEgPDwgZW5kbDsKCQkJZm9yKGludCBpID0gYW5zLnNpemUoKS0xOyBpID49IDA7IGktLSl7CgkJCQljb3V0IDw8IGFuc1tpXSA8PCAiICI7IC8vINCy0YvQstC+0LTQuNC8INC+0YLQstC10YIg0YHQv9GA0LDQstCwINC90LAg0LvQtdCy0L4s0YLQsNC6INGB0LrQsNC30LDQvdC+INCyINGD0YHQu9C+0LLQuNC4CgkJCX0KCQl9ZWxzZXsgLy8g0LjQvdCw0YfQtSAtMQoJCQljb3V0IDw8ICItMVxuIjsKCQl9Cgl9ZWxzZXsvL9C10YHQu9C4INC90LDRh9Cw0LvRjNC90LDRjyDQstC10YDRiNC40L3QsCDQuNC30L7Qu9C40YDQvtCy0LDQvdCwLNGC0L4g0YHRgNCw0LfRgyDQstGL0LLQvtC00LjQvCAtMQoJCWNvdXQgPDwgIi0xXG4iOwoJfQoJcmV0dXJuIDA7Cn0=