#include #include #include #include using namespace std; using ll = long long; using P = pair; int main(void){ int n, m, p; cin >> n >> m >> p; int s, g; cin >> s >> g; s--, g--; vector> to(n); for(int i=0; i> u >> v; u--, v--; to[u].push_back(v); swap(u, v); to[u].push_back(v); } auto BFS=[&](int st){ int inf=1e9+10; vector dist(n, vector(2, inf)); dist[st][0]=0; queue

bfs; bfs.emplace(0, st); while(bfs.size()){ auto [d, id]=bfs.front(); bfs.pop(); if(dist[id][d%2]!=d) continue; for(auto v:to[id]){ int nd=d+1; if(dist[v][nd%2]>nd){ dist[v][nd%2]=nd; bfs.emplace(nd, v); } } } return dist; }; auto d1=BFS(s); auto d2=BFS(g); vector ans; for(int i=0; ip) continue; ok=true; } //cout << "? " << i << ' ' << mi << endl; if(ok) ans.push_back(i+1); } sort(begin(ans), end(ans)); if(ans.empty()) cout << -1 << endl; else{ cout << ans.size() << endl; for(auto p:ans) cout << p << '\n'; } return 0; }