#!/usr/bin/env python3
import random
from math import log

random.seed(42)

n, m, k = map(int, input().split())

adj = [[] for _ in range(n)]
deg = [0] * n

for _ in range(m):
    u, v = map(int, input().split())
    u -= 1
    v -= 1
    adj[u].append(v)
    adj[v].append(u)
    deg[u] += 1
    deg[v] += 1

error = 0.0001
samples = min(3000, round(log(error) / log(1 - 4**-k)))
for _ in range(samples):
    green = [False] * n
    for i in range(n):
        if deg[i] <= k:
            green[i] = random.choice([True, False])

    vis = [False] * n
    components = []
    for i in range(n):
        if green[i] and not vis[i]:
            component = [i]
            vis[i] = True
            s = 0
            while s < len(component):
                u = component[s]
                s += 1
                for v in adj[u]:
                    if green[v] and not vis[v]:
                        vis[v] = True
                        component.append(v)
            components.append(component)

    edges = [0] * len(components)
    for i, component in enumerate(components):
        for u in component:
            for v in adj[u]:
                edges[i] += not green[v] or u < v

    dp = [False] * (k + 1)
    dp[0] = True
    for edge_count in edges:
        for j in range(k, edge_count - 1, -1):
            dp[j] |= dp[j - edge_count]

    if not dp[k]:
        continue

    order = list(range(len(components)))
    order.sort(key=lambda i: edges[i], reverse=True)

    ans = []
    for i in order:
        if edges[i] <= k and dp[k - edges[i]]:
            ans += components[i]
            k -= edges[i]
            if k == 0:
                break

    print(len(ans))
    print(*[i + 1 for i in ans])
    exit()

print("impossible")

