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
79
#include <bits/stdc++.h>
#define fi first
#define se second
#define PB push_back
using namespace std;

const int MAXN=2e5+2;
vector<int> sas[MAXN];
pair <int, int> wynik[MAXN];
int ile[MAXN];
int n, m, d, maks, zn;

void DFS(int x, int y)
{
    wynik[x].se=y;
    for(int i=0;i<sas[x].size();i++)
    {
        int s=sas[x][i];
        if(!ile[s])
            continue;
        else if(!wynik[s].se)
        {
            DFS(s, y);
            wynik[x].fi+=wynik[s].fi;
        }
    }
    wynik[x].fi++;
}


void usun(int x)
{
    ile[x]=0;
    while(!sas[x].empty())
    {
        int sasiad=sas[x].back();
        sas[x].pop_back();
        if(!ile[sasiad])
            continue;
        ile[sasiad]--;
        if(ile[sasiad]<d&&ile[sasiad])
        usun(sasiad);
    }
}
int main()
{
    scanf("%d%d%d", &n, &m, &d);
    for(int i=1;i<=m;i++)
    {
        int a, b;
        scanf("%d%d", &a, &b);
        sas[a].PB(b);
        sas[b].PB(a);
        ile[a]++, ile[b]++;
    }
    for(int i=1;i<=n;i++)
        if(ile[i]&&ile[i]<d)
            usun(i);
    for(int i=1;i<=n;i++)
        if(!wynik[i].se&&ile[i])
        {
            DFS(i, i);
            if(wynik[i].fi>maks)
            {
                maks=wynik[i].fi;
                zn=i;
            }
        }
    if(!maks)
        printf("NIE\n");
    else
    {
        printf("%d\n", maks);
        for(int i=1;i<=n;i++)
            if(wynik[i].se==zn)
                printf("%d ", i);
    }
    return 0;
}