public List<Integer> eventualSafeNodes(int[][] graph) {
// Method 1: BFS topologicl sort
List<Integer> res = new ArrayList<>();
if (graph == null || graph.length == 0) {
int[] outDegree = new int[n];
List<Set<Integer>> adjList = new ArrayList<>();
for (int i = 0; i < n; i++) {
adjList.add(new HashSet<>());
for (int i = 0; i < n; i++) {
for (int neighbor : graph[i]) {
adjList.get(neighbor).add(i);
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < n; i++) {
while (!queue.isEmpty()) {
int curNode = queue.remove();
for (int nextNode : adjList.get(curNode)) {
if (--outDegree[nextNode] == 0) {