from collections import deque

def min_semesters(n, prerequisites):
    adj, indegree = [[] for _ in range(n)], [0] * n
    for course, prerequisite in prerequisites:
        adj[prerequisite].append(course)
        indegree[course] += 1
    queue = deque(u for u in range(n) if indegree[u] == 0)
    semesters = processed = 0
    while queue:
        semesters += 1
        width = len(queue)
        for _ in range(width):
            u = queue.popleft()
            processed += 1
            for v in adj[u]:
                indegree[v] -= 1
                if indegree[v] == 0:
                    queue.append(v)
    return semesters if processed == n else -1
