local n, m, p = io.read("*n", "*n", "*n") local s, g = io.read("*n", "*n") local edge = {} for i = 1, n do edge[i] = {} end for i = 1, m do local a, b = io.read("*n", "*n") table.insert(edge[a], b) table.insert(edge[b], a) end local inf = 1000000007 local function solve(spos) local len = {} for i = 1, 2 * n do len[i] = inf end len[spos] = 0 local tasks = {spos} local done = 0 while done < #tasks do done = done + 1 local src = tasks[done] if src <= n then for j = 1, #edge[src] do local dst = edge[src][j] + n if len[dst] == inf then len[dst] = len[src] + 1 table.insert(tasks, dst) end end else for j = 1, #edge[src - n] do local dst = edge[src - n][j] if len[dst] == inf then len[dst] = len[src] + 1 table.insert(tasks, dst) end end end end return len end local slen = solve(s) local glen = solve(g) if p % 2 == 0 then local ret = {} for i = 1, n do if slen[i] + glen[i] <= p or slen[i + n] + glen[i + n] <= p then table.insert(ret, i) end end if #ret == 0 then print(-1) else print(#ret) print(table.concat(ret, "\n")) end else local ret = {} for i = 1, n do if slen[i] + glen[i + n] <= p or slen[i + n] + glen[i] <= p then table.insert(ret, i) end end if #ret == 0 then print(-1) else print(#ret) print(table.concat(ret, "\n")) end end