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

int main()
{
    int n,m,d,a,b,i,j,l,f;
    scanf("%d%d%d",&n,&m,&d);
    vector< vector<int> > g(n);
    int t[n];
    bool v[n];
    for(i=0;i<m;i++){
            v[i]=0;
        scanf("%d%d",&a,&b);
        g[a-1].push_back(b-1);
        g[b-1].push_back(a-1);
    }
    for(i=0;i<n;i++){
        l=g[i].size();
        if(l<d)
            t[i]=0;
        else
            t[i]=l;
    }
    for(i=0;i<n;i++){
        l=g[i].size();
        for(j=0;j<l;j++)
            if(t[g[i][j]]==0)
                t[i]--;
        if(t[i]<d)
            t[i]=0;
    }
    vector<int> mgm,cgm;
    queue<int> q;
    int mg=0,cg=0;
    for(int i=0;i<n;i++){
        if(t[i]<=0)
            v[i]=1;
        else{
            cg=1;
            q.push(i);
            v[i]=1;
            cgm.push_back(i);
            while(!q.empty()){
                f=q.front();
                l=g[f].size();
                for(int j=0;j<l;j++)
                    if(t[g[f][j]]>0&&v[g[f][j]]==0){
                        q.push(g[f][j]);
                        v[g[f][j]]=1;
                        cg++;
                        cgm.push_back(g[f][j]);
                    }
                q.pop();
            }
            if(cg>mg){
                mg=cg;
                mgm=cgm;
            }
            cg=0;cgm.clear();
        }
    }
    if(mg>0){
        sort(mgm.begin(),mgm.end());
        printf("%d\n",mg);
        l=mg-1;
        for(int i=0;i<l;i++)
            printf("%d ",mgm[i]+1);
        printf("%d",mgm[l]+1);
    }
    else
        printf("NIE");
    return 0;
}