#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmludCBuLG0sYSxiLGNvdW50ID0gMDsKdmVjdG9yPHZlY3RvcjxpbnQ+ID4gZ3JhZjsgdmVjdG9yPGludD4gdmVyOyB2ZWN0b3I8aW50PiBmYW1pbHk7IGJvb2wgb2sgPSBmYWxzZTsgdmVjdG9yPGludD4gYW5zOyB2ZWN0b3I8Ym9vbD4gcG9wYTsKIAppbnQgYmZzKGludCBiZWcsIGludCBlbmQpeyAvLyDRhNGD0L3QutGG0LjRjyDQutC+0YLQvtGA0LDRjyDQtNC+0LHQsNCy0LvRj9C10YIg0LLQtdGA0YjQuNC90Ysg0LIg0LLQtdC60YLQvtGAINCy0LXRgNGI0LjQvSzQutC+0YLQvtGA0YvQtSDQvNGLINC/0YDQvtGB0LzQvtGC0YDQuNC8LNC4INC/0L7QvNC10YfQsNC10YIg0LjRhSDQutCw0Log0YPQttC1INC/0YDQvtCy0LXRgNC10L3QvdGL0LUKICAgIGNvdW50Kys7CiAgICBpZihiZWcgPT0gZW5kKXsKICAgICAgICBvayA9IHRydWU7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9ZWxzZXsKICAgICAgICBmb3IoaW50IGkgPSBncmFmW2JlZ10uc2l6ZSgpIC0gMTtpID49IDA7aS0tKXsKICAgICAgICAgICAgaWYoIXBvcGFbZ3JhZltiZWddW2ldXSl7CiAgICAgICAgICAgICAgICB2ZXIucHVzaF9iYWNrKGdyYWZbYmVnXVtpXSk7CiAgICAgICAgICAgICAgICBmYW1pbHkucHVzaF9iYWNrKGJlZyk7CiAgICAgICAgICAgICAgICBwb3BhW2dyYWZbYmVnXVtpXV0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0KIAppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbiA+PiBuID4+IG07CiAgICBjaW4gPj4gYSA+PiBiOwogICAgZm9yKGludCBpID0gMCA7IGkgPD0gbjsgaSsrKXsgLy8g0YHQvtC30LTQsNC10Lwg0LLQtdC60YLQviDQstCy0LXQutGC0L7RgNC+0LIKICAgICAgICAgICAgZ3JhZi5wdXNoX2JhY2soYW5zKTsKICAgICAgICAgICAgcG9wYS5wdXNoX2JhY2soZmFsc2UpOwogICAgfQogICAgdmVyLnB1c2hfYmFjayhhKTtmYW1pbHkucHVzaF9iYWNrKGEpOwogICAgZm9yKGludCBpID0gMDsgaSA8IG07IGkrKyl7IC8v0LIg0LLQtdC60YLQvtGAINCy0LXRgNGI0LjQvdGLINC00L7QsdCw0LLQu9GP0LXQvCDRgtC1INCy0LXRgNGI0LjQvdGLLNGBINC60L7RgtC+0YDRi9C8INC+0L3QsCDRgdCy0Y/Qt9Cw0L3QvdCwIAogICAgICAgIGludCB4LHk7CiAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICBpZih4ICE9IHkpeyAvLyDQv9GA0L7QstC10YDQutCwINC90LAg0L/QtdGC0LvRjgogICAgICAgICAgICBncmFmW3hdLnB1c2hfYmFjayh5KTsKICAgICAgICAgICAgZ3JhZlt5XS5wdXNoX2JhY2soeCk7CiAgICAgICAgfQogICAgfQogICAgaWYoIWdyYWZbYV0uZW1wdHkoKSl7IC8v0LXRgdC70Lgg0LLQtdGA0YjQuNC90Ysg0L3QsNGH0LDQu9CwINC90LUg0LjQt9C+0LvQuNGA0L7QstCw0L3QvdCwIAogICAgICAgIHdoaWxlKCFvayAmJiBjb3VudCA8IHZlci5zaXplKCkgKXsgLy/RhtC40LrQuyzQv9C+0LrQsCDQvNGLINC90LUg0L3QsNC50LTQtdC8INC60L7QvdC10YfQvdGD0Y4g0LLQtdGA0YjQuNC90YMs0LjQu9C4INC10YHQu9C4INC80Ysg0L3QtSDQv9GA0L7RiNC70Lgg0LLRgdC1INCy0LXRgNGI0LjQvdGLINCyINCy0LXQutGC0L7RgNC1ICLQv9C70LDQvdCwIgogICAgICAgICAgICBpZihiZnModmVyW2NvdW50XSxiKSl7IC8v0LXRgdC70Lgg0LzRiyDQvdCw0YjQu9C4INCy0YvRhdC+0LQs0YLQviDQvdCw0YfQsNGC0Ywg0LLQvtGB0YHRgtCw0L3QsNCy0LvQuNCy0LDRgtGMINC/0YPRgtC4CiAgICAgICAgICAgICAgICBjb3VudC0tOy8vINCd0LDQvCDQvdCw0LTQviDQvdCw0YfQsNGC0Ywg0YEg0L/QvtGB0LvQtdC00L3QtdC5INCy0LXRgNGI0LjQvdGLLNCwINGN0YLQviBjb3VudCAtIDEg0LLQtdGA0YjQuNC90LAKICAgICAgICAgICAgICAgIGludCBwID0gMTsgLy/QndC+0LLQsNGPINC/0LXRgNC10LzQtdC90L3QsNGPLNC60L7RgtC+0YDQsNGPINC90YPQttC90LAs0LTQu9GPINC90LDRhdC+0LbQtNC10L3QuNGPINC/0LXRgNCy0L7Qs9C+INCy0YXQvtC20LTQtdC90LjRjyAi0L7RgtGG0LAiINC00LDQvdC90L7QuSDQstC10YDRiNC40L3RiwogICAgICAgICAgICAgICAgYW5zLnB1c2hfYmFjayhiKTsvL9Cy0LXQutGC0L7RgCDQvtGC0LLQtdGC0LAKICAgICAgICAgICAgICAgIHdoaWxlKHZlcltjb3VudF0gIT0gYSl7IC8vINC/0L7QutCwINC90LUg0LTQvtGI0LvQuCDQtNC+INC90LDRh9Cw0LvRjNC90L7QuSDQstC10YDRiNC40L3RiwogICAgICAgICAgICAgICAgICAgIHdoaWxlKHZlcltwXSAhPSBmYW1pbHlbY291bnRdKXsvL9C00LLQuNCz0LDQtdC80YHRjyDRgdC70LXQstCwINC/0YDQvtC50LTQtdC90L3Ri9GFINC/0L4g0LLQtdC60YLQvtGA0YMg0LLQtdGA0YjQuNC9INC/0LvQsNC90LAs0Lgg0LjRidC10Lwg0L/QtdGA0LLQvtC1INCy0YXQvtC20LTQtdC90LjQtSDQstC10YDRiNC40L3RiyDQntCi0KbQkAogICAgICAgICAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGFucy5wdXNoX2JhY2sodmVyW3BdKTsvL9C00L7QsdCw0LLQu9GP0LXQvCDQsiDQvtGC0LLQtdGCINCy0LXRgNGI0LjQvdGDLNC40Lcg0LrQvtGC0L7RgNC+0Lkg0LzRiyDQv9C+0L/QsNC70Lgg0LIg0L/RgNC10LTRi9C00YPRidGD0Y4gKNC+0YLRhtCwKQogICAgICAgICAgICAgICAgICAgIGNvdW50ID0gcDsvLyDRgtC10L/QtdGA0Ywg0LjRidC10Lwg0L7RgtGG0LAg0L7RgtGG0LAg0Lgg0YLQsNC6INC00LDQu9C10LUs0L/QvtC60LAg0L3QtSDQtNC+0LnQtNC10Lwg0LTQviDQvdCw0YfQsNC70YzQvdC+0Lkg0LLQtdGA0YjQuNC90YsgCiAgICAgICAgICAgICAgICAgICAgcCA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoYW5zLnNpemUoKSA+IDApeyAvLyDQtdGB0LvQuCDQstC10LrRgtC+0YAg0L7RgtCy0LXRgtCwINC90LUg0L/Rg9GB0YIo0LjQvNC10LXRgiDRhdC+0YLRj9Cx0Ysg0L7QtNC90YMg0LLQtdGA0YjQuNC90Ysg0LjQtyDQv9GD0YLQuCkKICAgICAgICAgICAgY291dCA8PCBhbnMuc2l6ZSgpLTEgPDwgZW5kbDsKICAgICAgICAgICAgZm9yKGludCBpID0gYW5zLnNpemUoKS0xOyBpID49IDA7IGktLSl7CiAgICAgICAgICAgICAgICBjb3V0IDw8IGFuc1tpXSA8PCAiICI7IC8vINCy0YvQstC+0LTQuNC8INC+0YLQstC10YIg0YHQv9GA0LDQstCwINC90LAg0LvQtdCy0L4s0YLQsNC6INGB0LrQsNC30LDQvdC+INCyINGD0YHQu9C+0LLQuNC4CiAgICAgICAgICAgIH0KICAgICAgICB9ZWxzZXsgLy8g0LjQvdCw0YfQtSAtMQogICAgICAgICAgICBjb3V0IDw8ICItMVxuIjsKICAgICAgICB9CiAgICB9ZWxzZXsvL9C10YHQu9C4INC90LDRh9Cw0LvRjNC90LDRjyDQstC10YDRiNC40L3QsCDQuNC30L7Qu9C40YDQvtCy0LDQvdCwLNGC0L4g0YHRgNCw0LfRgyDQstGL0LLQvtC00LjQvCAtMQogICAgICAgIGNvdXQgPDwgIi0xXG4iOwogICAgfQogICAgcmV0dXJuIDA7Cn0=