import java.io.*; import java.util.*; public class TobiRandomSeparationTranscribed { public static void main(String[] args) throws IOException { try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) { new TobiRandomSeparationTranscribed().run(new Scanner(reader)); } } public void run(Scanner scanner) throws IOException { Random rng = new Random(System.currentTimeMillis()); int n = scanner.nextInt(); int m = scanner.nextInt(); int k = scanner.nextInt(); List> adj = new ArrayList<>(n); int[] deg = new int[n]; for (int i = 0; i < n; i++) { adj.add(new ArrayList<>()); } for (int i = 0; i < m; i++) { int u = scanner.nextInt() - 1; int v = scanner.nextInt() - 1; adj.get(u).add(v); adj.get(v).add(u); deg[u]++; deg[v]++; } double error = 0.0001; int samples = Math.min(3000, (int) (Math.log(error) / Math.log(1 - Math.pow(4, -k)))); for (int z = 0; z < samples; z++) { boolean[] green = new boolean[n]; for (int i = 0; i < n; i++) { if (deg[i] <= k) { green[i] = rng.nextInt(2) == 1; } } boolean[] vis = new boolean[n]; List> components = new ArrayList<>(); for (int i = 0; i < n; i++) { if (green[i] && !vis[i]) { List component = new ArrayList<>(); component.add(i); vis[i] = true; for (int j = 0; j < component.size(); j++) { for (int v : adj.get(component.get(j))) { if (green[v] && !vis[v]) { component.add(v); vis[v] = true; } } } components.add(component); } } int[] edges = new int[components.size()]; for (int i = 0; i < components.size(); i++) { for (int u : components.get(i)) { for (int v : adj.get(u)) { edges[i] += (!green[v] || u < v) ? 1 : 0; } } } boolean[][] dp = new boolean[components.size() + 1][k + 1]; dp[0][0] = true; for (int i = 0; i < components.size(); i++) { for (int j = 0; j <= k; j++) { dp[i + 1][j] |= dp[i][j]; if (j + edges[i] <= k) { dp[i + 1][j + edges[i]] |= dp[i][j]; } } } if (!dp[components.size()][k]) continue; List ans = new ArrayList<>(); for (int i = components.size(), j = k; i > 0 && j > 0; i--) { if (dp[i][j] && !dp[i - 1][j]) { ans.addAll(components.get(i - 1)); j -= edges[i - 1]; } } System.out.println(ans.size()); for (int i : ans) { System.out.println(i + 1); } return; } System.out.println("impossible"); } }