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
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class mis {

	public static void main(String[] args) throws IOException {
		BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer tokenizer = new StringTokenizer(bi.readLine());
		int liczbaMiast = Integer.parseInt(tokenizer.nextToken());
		int liczbaDrog = Integer.parseInt(tokenizer.nextToken());
		int d = Integer.parseInt(tokenizer.nextToken());
		Zbior zbior = new Zbior(liczbaMiast);
		for (int i = 0; i< liczbaDrog; i++){
			tokenizer = new StringTokenizer(bi.readLine());
			int miastoA = Integer.parseInt(tokenizer.nextToken());
			int miastoB = Integer.parseInt(tokenizer.nextToken());
			zbior.addScizke(miastoA-1, miastoB-1);
			
		}
		zbior.zmniejszanie(d);
		StringBuilder wynik = new StringBuilder();
		int ile = 0;
		for (int i = 0; i<zbior.sciezka.size(); i++)
			if (zbior.sciezka.get(i).size() > 0){
				ile++;
				if (i == zbior.sciezka.size()-1)
					wynik.append(i+1);
				else
					wynik.append((i+1)+" ");
			}
		
			
		PrintWriter drukuj = new PrintWriter(new BufferedOutputStream(System.out));
		if (ile != 0){
			drukuj.println(ile);
			drukuj.println(wynik.toString());
		}
		else
			drukuj.println("NIE");
		drukuj.flush();
	}

}

class Zbior{
	
	ArrayList<ArrayList<Integer>> sciezka;
	
	Zbior(int liczbaMiast){
		sciezka = new ArrayList<>();
		for (int i = 0; i<liczbaMiast; i++){
			sciezka.add(new ArrayList<Integer>());
		}
	}
	
	void addScizke(int a, int b){
		sciezka.get(a).add(b);
		sciezka.get(b).add(a);
	}
	
	void zmniejszanie(int minimalnaIloscDrog){
		int i = 0;
		while(i<sciezka.size()){
			if (sciezka.get(i).size() < minimalnaIloscDrog && 0 < sciezka.get(i).size()){
				int gdzieSieCofnac = this.removeNodeAndMinimalRemovedIndex(i);
				if (gdzieSieCofnac < i)
					i=gdzieSieCofnac-1;
			}
			i++;
		}
	}
	
	int removeNodeAndMinimalRemovedIndex(int a){
		int minimalIndex = Integer.MAX_VALUE;
		for (int i = sciezka.get(a).size()-1; i>=0; i--){
			int gdzieUsunacA = sciezka.get(a).get(i);
			for (int j = 0; j<sciezka.get(gdzieUsunacA).size(); j++)
				if (sciezka.get(gdzieUsunacA).get(j) == a){
					sciezka.get(gdzieUsunacA).remove(j);
					break;
				}
			sciezka.get(a).remove(i);
			minimalIndex = Math.min(minimalIndex, gdzieUsunacA);
		}
		return minimalIndex;
	}
	
	void removeNode(int a){
		for (int i = sciezka.get(a).size()-1; i>=0; i--){
			int gdzieUsunacA = sciezka.get(a).get(i);
			for (int j = 0; j<sciezka.get(gdzieUsunacA).size(); j++)
				if (sciezka.get(gdzieUsunacA).get(j) == a){
					sciezka.get(gdzieUsunacA).remove(j);
					break;
				}
			sciezka.get(a).remove(i);
		}
	}
	
	void print(){
		for (int i = 0; i<sciezka.size(); i++){
			System.out.print(i+ " | ");
			for (int j = 0; j<sciezka.get(i).size(); j++)
				System.out.print(sciezka.get(i).get(j)+ " ");
			System.out.println();
		}
	}
}