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
78
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;

vector<int> sas[200005];
int st[200005],d,nr,licz[200005],naj,sp[200005];
bool byl[200005],odw[200005];

void zabij (int co)
{
    byl[co]=1;

    for (vector<int>::iterator it=sas[co].begin(); it!=sas[co].end(); it++)
    {
        st[*it]--;

        if (!byl[*it] && st[*it]<d)
            zabij(*it);
    }
}

void dfs (int co)
{
    odw[co]=1;
    sp[co]=nr;
    licz[nr]++;

    for (vector<int>::iterator it=sas[co].begin(); it!=sas[co].end(); it++)
        if (!byl[*it] && !odw[*it])
            dfs(*it);
}

int main()
{
    int n,m,a,b,c;

    scanf ("%d%d%d", &n, &m, &d);

    while (m--)
    {
        scanf ("%d%d", &a, &b);
        st[a]++;
        st[b]++;
        sas[a].push_back(b);
        sas[b].push_back(a);
    }

    for (a=1; a<=n; a++)
        if (!byl[a] && st[a]<d)
            zabij(a);

    for (a=1; a<=n; a++)
        if (!byl[a] && !odw[a])
        {
            nr++;
            dfs(a);

            if (licz[nr]>naj)
            {
                naj=licz[nr];
                c=nr;
            }
        }

    if (naj)
    {
        printf ("%d\n", naj);

        for (a=1; a<=n; a++)
            if (sp[a]==c)
                printf ("%d ", a);
    }
    else
        printf ("NIE");

    return 0;
}