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
104
105
106
107
#include<bits/stdc++.h>
#define PB push_back
#define mp make_pair
using namespace std;

typedef long long ll;
typedef pair<ll,ll> pll;

const ll N = 200010;
vector <ll> graf [N];
stack <ll> S;
stack <ll> usun;

ll C [N];
ll cn, m, n, b, u, v, MAKS, licznik;
ll CN [N];
ll deg[N];
bool czy;
bool niema[N];


void wywal ()
{
    for(ll i = 1; i <= n; ++i)
        if(deg[i] < b)
            usun.push(i);

    while(!usun.empty())
    {
        u = usun.top();
        usun.pop();
        if(niema[u] == true) continue;
        niema[u] = true;
        ++licznik;
        for(ll j = 0; j < graf[u].size(); ++j)
        {
            if(niema[graf[u][j]]) continue;
            --deg[graf[u][j]];
            if(deg[graf[u][j]] < b) usun.push(graf[u][j]);
        }
    }
}



void ile()
{
    for(ll i = 1; i <= n; ++i)
    {
        if (C[i] > 0) continue;
        if (niema[i] == true) continue;

        ++cn;
        S.push(i);
        C[i] = cn;
        ++CN[cn];

        while(!S.empty())
        {
            v = S.top();
            S.pop();
            for(ll j=0; j<graf[v].size();++j)
            {
                u = graf[v][j];

                if(C[u] > 0) continue;
                if (niema[u] == true) continue;
                S.push(u);
                C[u] = cn;
                ++CN[cn];
            }
        }
    }
}

int main()
{
    scanf("%lld %lld %lld", &n, &m, &b);
    for(ll i = 1; i <= m; ++i )
    {
        scanf("%lld %lld",&u, &v);
        ++deg[u];
        ++deg[v];
        graf[u].PB(v);
        graf[v].PB(u);
    }
/// ILOSC
wywal();

if(licznik < n)
{
 /// SPOJNE
    ile();

for (ll i=1; i <= cn; ++ i)
{
    if (CN[i] > CN[MAKS]) MAKS = i;
}
    printf("%lld\n", CN[MAKS]);
for(ll i = 1;i <= n; ++i)
    if(C[i] == MAKS)    printf("%lld ",i);
    printf("\n");
}
else
{
printf("NIE\n");}
}