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
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>

using namespace std;

int miasta;
int drogi;
int d;

int a, b;
vector<int> sasiad[200005];
int wielkosc[200005];
bool visited[200005];
bool visited2[200005];

queue<int> doodjebki;
int gorny;

int aktual;
int aktorg[200005];
int wynik;
int wynorg[200005];

int dfs(int miasto)
{
    visited2[miasto] = true;
    aktorg[aktual] = miasto;
    aktual++;
    for(int i=0; i<sasiad[miasto].size(); i++)
    {
        if(visited2[sasiad[miasto][i]] == false && visited[sasiad[miasto][i]] == false)
            dfs(sasiad[miasto][i]);
    }
}

int main()
{
    scanf("%d%d%d",&miasta,&drogi,&d);
    for(int i=0; i<drogi; i++)
    {
        scanf("%d%d",&a,&b);
        sasiad[a].push_back(b);
        wielkosc[a]++;
        sasiad[b].push_back(a);
        wielkosc[b]++;
    }

    for(int i=1; i<=miasta; i++) // usuniecie niepasujacych miast
    {
        if(wielkosc[i] < d)
        {
            doodjebki.push(i);
            visited[i] = true;
        }
    }
    while(!doodjebki.empty())
    {
        gorny = doodjebki.front();
        doodjebki.pop();
        for(int i=0; i<sasiad[gorny].size(); i++)
        {
            wielkosc[sasiad[gorny][i]]--;
            if(wielkosc[sasiad[gorny][i]] < d && visited[sasiad[gorny][i]] == false)
            {
                doodjebki.push(sasiad[gorny][i]);
                visited[sasiad[gorny][i]] = true;
            }
        }
    }

    for(int i=1; i<=miasta; i++) // znalezienie najlepszego rozwiazania
    {
        if(visited2[i] == false && visited[i] == false)
        {
            for(int j=0; j<aktual; j++)
                aktorg[j] = 0;
            aktual = 0;

            dfs(i);

            if(aktual > wynik)
            {
                for(int j=0; j<aktual; j++)
                    wynorg[j] = aktorg[j];
                wynik = aktual;
            }
        }
    }

    if(wynik == 0)
        printf("NIE");
    else
    {
        sort(wynorg,wynorg+wynik);
        printf("%d\n",wynik);
        for(int i=0; i<wynik; i++)
            printf("%d ",wynorg[i]);
    }

	return 0;
}