import java.awt.Color; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Queue; import java.util.List; import java.util.Scanner; public class prog { private static enum Color { BLACK, WHITE, RED, } private static class Vertex { public Color color; public List adjacents; Vertex(Color color, List adjacents) { this.color = color; this.adjacents = adjacents; } } public static void main(String[] args) { try (Scanner scanner = new Scanner(System.in)) { int N = scanner.nextInt(); int M = scanner.nextInt(); List graph = new ArrayList<>(); for (int i = 0; i < N; ++i) { graph.add(new Vertex(Color.WHITE, new ArrayList<>())); } for (int i = 0; i < M; ++i) { int u = scanner.nextInt(); int v = scanner.nextInt(); --u; --v; graph.get(u).adjacents.add(v); graph.get(v).adjacents.add(u); } Queue blacks = new ArrayDeque<>(); Queue reds = new ArrayDeque<>(); blacks.add(0); graph.get(0).color = Color.BLACK; for (int t = 0; t < N; ++t) { // step 1 for (Integer i : blacks) { for (Integer j : graph.get(i).adjacents) { Vertex vertex = graph.get(j); if (vertex.color == Color.WHITE) { vertex.color = Color.RED; reds.add(j); } } } // step 2 while (!blacks.isEmpty()) { graph.get(blacks.poll()).color = Color.WHITE; } // step 3 while (!reds.isEmpty()) { Integer i = reds.poll(); graph.get(i).color = Color.BLACK; blacks.add(i); } System.out.println(blacks.size()); } } } }