import java.util.*;

public class KljuceviSobe {
    public boolean canVisitAllRooms(List<List<Integer>> rooms) {
        // Broj soba
        int n = rooms.size();

        // Praćenje posećenih soba
        boolean[] visited = new boolean[n];
        visited[0] = true; // Start with room 0

        // Red za BFS
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(0); // Počni od sobe 0

        // BFS obilazak
        while (!queue.isEmpty()) {
            int currentRoom = queue.poll(); // Preuzmi sobu iz reda

            // Proveri ključeve u trenutnoj sobi
            for (int key : rooms.get(currentRoom)) {
                if (!visited[key]) {
                    visited[key] = true; // Označi kao posećeno
                    queue.offer(key);   // Dodaj neotključanu sobu u red
                }
            }
        }

        // Proveri da li su sve sobe posećene
        for (boolean roomVisited : visited) {
            if (!roomVisited) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        KljuceviSobe solution = new KljuceviSobe();

        // Primer inputa
        List<List<Integer>> rooms = new ArrayList<>();
        rooms.add(Arrays.asList(1));       // Soba 0 ima ključ za sobu 1
        rooms.add(Arrays.asList(2));       // Soba 1 ima ključ za sobu 2
        rooms.add(Arrays.asList(3));       // Soba 2 ima ključ za sobu 3
        rooms.add(new ArrayList<>());      // Soba 3 nema ključeva


        System.out.println(solution.canVisitAllRooms(rooms)); // Output: true
    }
}
