#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(a) a.begin(),a.end() #define rep(i, n) for (ll i = 0; i < (n); i++) #define pb push_back #define debug(x) cerr << __LINE__ << ' ' << #x << ':' << x << '\n' #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair P; typedef complex com; constexpr int inf = 1000000010; constexpr ll INF = 1000000000000000010; constexpr ld eps = 1e-12; constexpr ld pi = 3.141592653589793238; template inline bool chmax(T &a, const U &b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(T &a, const U &b) { if (a > b) { a = b; return true; } return false; } vector> bfs(int s, vector>> graph) { int n = graph.size(); queue

que; que.push({ s,0 }); vector> res(n, { inf,inf }); vector> vis(n, vector(2)); res[s][0] = 0; vis[s][0] = 1; while (!que.empty()) { P p = que.front(); que.pop(); ll pf = p.first, ps = p.second; for (P nxt : graph[pf][ps]) { ll nf = nxt.first; ll ns = nxt.second; if (!vis[nf][ns]) { vis[nf][ns] = 1; res[nf][ns] = res[pf][ps] + 1; que.push({ nf,ns }); } } } return res; } int main() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(20); int n, m, p; cin >> n >> m >> p; int s, g; cin >> s >> g; s--; g--; vector>> graph(n, vector>(2, vector

())); rep(i, m) { int u, v; cin >> u >> v; u--; v--; rep(j, 2){ graph[u][j].pb({ v,j ^ 1 }); graph[v][j].pb({ u,j ^ 1 }); } } vector> x = bfs(s, graph); vector> y = bfs(g, graph); int check = p & 1; vector ans; rep(i, n) { int val1 = x[i][0] + y[i][0 ^ check]; int val2 = x[i][1] + y[i][1 ^ check]; if (val1 <= p || val2 <= p) ans.pb(i); } if (ans.size() == 0) { cout << "-1\n"; return 0; } cout << ans.size() << '\n'; for (int i : ans) cout << i + 1 << '\n'; }