1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <bits/stdc++.h>
using namespace std;

int n, m, d;
vector<unordered_set<int>> G;
unordered_set<int> sentenced;

int main() {
  scanf("%d%d%d", &n, &m, &d);
  G.resize(n);

  for(int i = 0; i < m; ++i) {
    int ai, bi;
    scanf("%d%d", &ai, &bi);

    --ai;
    --bi;

    G[ai].insert(bi);
    G[bi].insert(ai);
  }

  for(int i = 0; i < n; ++i)
    if(G[i].size() < d)
      sentenced.insert(i);

  while(!sentenced.empty()) {
    auto sit = sentenced.begin();
    int s = *sit;
    sentenced.erase(sit);

    for(int i : G[s]) {
      G[i].erase(s);
      if(G[i].size() < d)
        sentenced.insert(i);
    }

    G[s].clear();
  }

  vector<vector<int>> anss;
  for(int i = 0; i < n; ++i)
    if(!G[i].empty()) {
      vector<int> st {i};
      anss.emplace_back();

      while(!st.empty()) {
        int j = st.back();
        st.pop_back();
        if(!G[j].empty()) {
          anss.back().push_back(j);

          for(int k : G[j])
            if(!G[k].empty())
              st.push_back(k);

          G[j].clear();
        }
      }
    }

  if(anss.empty()) {
    printf("NIE\n");

    return 0;
  }

  auto ansit = max_element(anss.begin(), anss.end(), [](const vector<int> &va, const vector<int> &vb)
    { return va.size() < vb.size(); });

  printf("%d\n", int(ansit->size()));
  for(int i : *ansit)
    printf("%d ", i+1);
  printf("\n");

  return 0;
}