from collections import deque def main(): import sys input = sys.stdin.read data = input().split() idx = 0 n = int(data[idx]) idx += 1 m = int(data[idx]) idx += 1 x = int(data[idx]) idx += 1 y = int(data[idx]) idx += 1 z = int(data[idx]) idx += 1 friends = [set() for _ in range(n + 1)] for _ in range(m): a = int(data[idx]) idx += 1 b = int(data[idx]) idx += 1 friends[a].add(b) friends[b].add(a) complement = [[] for _ in range(n + 1)] for i in range(1, n + 1): for j in range(1, n + 1): if i != j and j not in friends[i]: complement[i].append(j) complement[i].sort() visited = set() queue = deque() initial_visited_mask = 0 queue.append((x, 0, initial_visited_mask, [x])) found = False answer = [] while queue: current_node, mask, visited_mask, path = queue.popleft() if current_node == x and len(path) > 1: if mask == 0b11: if path[-2] not in friends[x]: answer = path found = True break next_nodes = complement[current_node] for next_node in next_nodes: if next_node == x: if mask == 0b11 and len(path) >= 3: new_path = path + [x] state = (x, mask, visited_mask) if state not in visited: visited.add(state) queue.append((x, mask, visited_mask, new_path)) continue if (visited_mask & (1 << (next_node - 1))) != 0: continue new_mask = mask if next_node == y: new_mask |= 0b01 if next_node == z: new_mask |= 0b10 new_visited_mask = visited_mask | (1 << (next_node - 1)) new_path = path + [next_node] state = (next_node, new_mask, new_visited_mask) if state not in visited: visited.add(state) queue.append((next_node, new_mask, new_visited_mask, new_path)) if found: k = len(answer) - 1 print(k) print(' '.join(map(str, answer))) else: print(-1) if __name__ == "__main__": main()