def provinces(matrix):
    n = len(matrix)
    seen, count = set(), 0
    for start in range(n):
        if start in seen:
            continue
        count += 1
        seen.add(start)
        stack = [start]
        while stack:
            u = stack.pop()
            for v, connected in enumerate(matrix[u]):
                if connected and v not in seen:
                    seen.add(v)
                    stack.append(v)
    return count
