#include using namespace std; #define rep(i,n) for (int i = 0; i < (int)(n); ++i) #define rrep(i,n) for (int i = (int)(n-1); i >= 0; --i) #define Rep(i,a,b) for (int i = a; i < b; ++i) #define rRep(i,a,b) for (int i = a; i > b; --i) #define fore(i,a) for(auto &i:a) #define all(v) (v).begin(),(v).end() #define rall(v) (v).rbegin(),(v).rend() #define Unique(v) v.erase(unique(v.begin(), v.end()), v.end()); #define Bit(x,i) (((x)>>(i))&1) using ll = long long; using vi = vector; using vll = vector; using vvi = vector; using vvll = vector; using vb = vector; using vs = vector; using pii = pair; using pll = pair; templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b> N >> M >> P; int s, g; cin >> s >> g; --s; --g; rep(i, M) { int u, v; cin >> u >> v; --u; --v; G[u].push_back(v); G[v].push_back(u); } queue que; que.push(s); d1[s][0] = 0; while(!que.empty()) { int nw = que.front(); que.pop(); fore(nx, G[nw]) { if(d1[nx][0] == -1) { if(d1[nw][1] >= 0) { d1[nx][0] = d1[nw][1] + 1; que.push(nx); } } if(d1[nx][1] == -1) { if(d1[nw][0] >= 0) { d1[nx][1] = d1[nw][0] + 1; que.push(nx); } } } } que.push(g); dN[g][0] = 0; while(!que.empty()) { int nw = que.front(); que.pop(); fore(nx, G[nw]) { if(dN[nx][0] == -1) { if(dN[nw][1] >= 0) { dN[nx][0] = dN[nw][1] + 1; que.push(nx); } } if(dN[nx][1] == -1) { if(dN[nw][0] >= 0) { dN[nx][1] = dN[nw][0] + 1; que.push(nx); } } } } vi ans; rep(i, N) { if(d1[i][0] >= 0 && dN[i][0] >= 0) { ll sum = d1[i][0] + dN[i][0]; if(sum <= P && (P - sum)%2 == 0) { ans.push_back(i); continue; } } if(d1[i][0] >= 0 && dN[i][1] >= 0) { ll sum = d1[i][0] + dN[i][1]; if(sum <= P && (P - sum)%2 == 0) { ans.push_back(i); continue; } } if(d1[i][1] >= 0 && dN[i][0] >= 0) { ll sum = d1[i][1] + dN[i][0]; if(sum <= P && (P - sum)%2 == 0) { ans.push_back(i); continue; } } if(d1[i][1] >= 0 && dN[i][1] >= 0) { ll sum = d1[i][1] + dN[i][1]; if(sum <= P && (P - sum)%2 == 0) { ans.push_back(i); continue; } } } int sz = ans.size(); if(sz == 0) { cout << -1 << endl; } else { cout << sz << endl; rep(i, sz) { cout << ans[i]+1 << endl; } } }