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
108
109
110
111
112
113
114
115
116
117
118
// Artur Kraska, II UWr

#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <cmath>
#include <list>
#include <set>
#include <map>

#define forr(i, n)                  for(int i=0; i<n; i++)
#define FOREACH(iter, coll)         for(auto iter = coll.begin(); iter != coll.end(); ++iter)
#define FOREACHR(iter, coll)        for(auto iter = coll.rbegin(); iter != coll.rend(); ++iter)
#define lbound(P,R,PRED)            ({typeof(P) X=P,RRR=(R), PPP = P; while(PPP<RRR) {X = (PPP+(RRR-PPP)/2); if(PRED) RRR = X; else PPP = X+1;} PPP;})
#define testy()                     int _tests; scanf("%d", &_tests); FOR(_test, 1, _tests)
#define CLEAR(tab)                  memset(tab, 0, sizeof(tab))
#define CONTAIN(el, coll)           (coll.find(el) != coll.end())
#define FOR(i, a, b)                for(int i=a; i<=b; i++)
#define FORD(i, a, b)               for(int i=a; i>=b; i--)
#define MP                          make_pair
#define PB                          push_back
#define deb(X)                      X;

#define M 1000000007
#define INF 1000000007

using namespace std;

int n, m, d;
int a, b;
list <int> lista;

struct miasto
{
    int ile;
    list <int> l;
};
miasto tab[1000007];

void dfs(int nr, vector <int> &l)
{
//    cout << " dfs z " << nr << endl;
    l.PB(nr);
    tab[nr].ile = 0;

    FOREACH(it, tab[nr].l)
        if(tab[*it].ile >= d)
            dfs(*it, l);
}

int main()
{
    scanf("%d %d %d", &n, &m, &d);
    forr(i, m)
    {
        scanf("%d %d", &a, &b);
        tab[a].l.PB(b);
        tab[b].l.PB(a);
        tab[a].ile++;
        tab[b].ile++;
    }
    FOR(i, 1, n)
    {
        if(tab[i].ile < d)
            lista.PB(i);
    }

    while(!lista.empty())
    {
        int nr = lista.front();
        lista.pop_front();

//        cout << " wywala " << nr << endl;

        FOREACH(it, tab[nr].l)
        {
            if(tab[*it].ile == d)
            {
                lista.PB(*it);
            }
            tab[*it].ile--;
        }
    }

    vector <int> res, pom;
    FOR(i, 1, n)
    {
        if(tab[i].ile >= d)
        {
            pom.clear();
            dfs(i, pom);
            if(pom.size() > res.size())
            {
                res.clear();
                FOREACH(it, pom)
                    res.PB(*it);
            }
        }
    }

    sort(res.begin(), res.end());
    if(res.size() > 0)
    {
        printf("%d\n", res.size());
        FOREACH(it, res)
            printf("%d ", *it);
        printf("\n");
    }
    else
    {
        printf("NIE\n");
    }

    return 0;
}