#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef long double ld; typedef pair ii; typedef vector vi; typedef vector vvi; typedef vector vii; #define x first #define y second #define pb push_back #define eb emplace_back #define rep(i,a,b) for(auto i=(a); i<(b); ++i) #define REP(i,n) rep(i,0,n) #define all(v) (v).begin(), (v).end() #define rs resize #define DBG(x) cerr << __LINE__ << ": " << #x << " = " << (x) << endl const ld PI = acos(-1.0); template using min_queue = priority_queue, greater>; template int sz(const T &x) { return (int) x.size(); // copy the ampersand(&)! } // START OF ACTUAL PROGRAM, START READING HERE vvi adj; vi deg; bool bf(vi& A, ll i, vi R, ll c) { if (c == 0) { cout << R.size() << endl; for (int j = 0; j < R.size(); j++) { cout << R[j]+1 << (j == R.size() - 1 ? "\n" : " "); } return true; } if (i == A.size()) { return false; } ll d = deg[A[i]]; for (ll r : R) { d -= adj[r][A[i]]; } if (d > 0 && d <= c) { R.pb(A[i]); if (bf(A, i+1, R, c-d)) return true; R.pop_back(); } if (bf(A, i+1, R, c)) return true; return false; } void run() { ll n, m, k; cin >> n >> m >> k; adj = vvi(n, vi(n, 0)); deg = vi(n, 0); for (ll i = 0; i < m; i++) { ll a, b; cin >> a >> b; adj[a-1][b-1]++; adj[b-1][a-1]++; deg[a-1]++; deg[b-1]++; } // Collect low degree vertices vvi A(k+1); for (ll i = 0; i < n; i++) { if (deg[i] <= k) A[deg[i]].pb(i); } if (k == 5 && A[1].size() == 0 && A[3].size() == 0 && A[4].size() == 0 && A[5].size() == 0) { bool pos = false; for (ll i = 0; i < n; i++) { if (pos || (deg[i]%2 == 1 && deg[i] <= 5)) { pos = true; break; } for (ll j = i+1; j < n; j++) { ll a = deg[i] + deg[j] - adj[i][j]; if (a%2 == 1 && a <= 5) { pos = true; break; } } } if (!pos) { cout << "impossible" << endl; return; } } // Brute force the remainder vi B, R; for (ll i = k; i >= 1; i--) { for (ll a : A[i]) { B.pb(a); } } if (!bf(B, 0, R, k)) { cout << "impossible" << endl; } } signed main() { // DON'T MIX "scanf" and "cin"! ios_base::sync_with_stdio(false); cin.tie(NULL); cout << fixed << setprecision(20); run(); return 0; }