def solve_n_queens_with_first(n, first_pos, find_all=False):
    """
    Solve n-Queens given a pre-placed queen at first_pos (r, c), 0-indexed.
    Returns:
      - if find_all=False: one solution as a list of rows where board[r][c] = 1
      - if find_all=True: list of all such solutions
      If no solution: returns None (or empty list when find_all=True).
    """
    r0, c0 = first_pos
    # validate first position
    if not (0 <= r0 < n and 0 <= c0 < n):
        raise ValueError("first_pos must be within board bounds (0..n-1).")

    # Prepare trackers
    cols = set([c0])
    diag1 = set([r0 - c0])   # r - c
    diag2 = set([r0 + c0])   # r + c
    board = [-1] * n         # board[r] = c or -1
    board[r0] = c0

    solutions = []

    def place(row):
        # If row already has the placed queen, skip to next row
        if row == n:
            # a solution found; build matrix representation
            mat = [[0]*n for _ in range(n)]
            for rr in range(n):
                c = board[rr]
                if c != -1:
                    mat[rr][c] = 1
            if find_all:
                solutions.append(mat)
                return False  # continue searching
            else:
                solutions.append(mat)
                return True   # stop search (found one)
        if board[row] != -1:
            # fixed queen row, just advance
            return place(row+1)

        for c in range(n):
            if c in cols or (row - c) in diag1 or (row + c) in diag2:
                continue
            # choose
            board[row] = c
            cols.add(c); diag1.add(row - c); diag2.add(row + c)
            stop = place(row + 1)
            # unchoose
            cols.remove(c); diag1.remove(row - c); diag2.remove(row + c)
            board[row] = -1
            if stop and not find_all:
                return True
        return False

    # Start from row 0
    place(0)

    if find_all:
        return solutions  # possibly empty list
    else:
        return solutions[0] if solutions else None


# ---------- Example usage ----------
if __name__ == "__main__":
    # Example 1: n=8, first queen at row0,col0 (top-left)
    n = 8
    first = (0, 0)  # 0-indexed
    sol = solve_n_queens_with_first(n, first, find_all=False)
    if sol is None:
        print("No solution found.")
    else:
        print("One solution matrix (1 = queen):")
        for row in sol:
            print(row)

    # Example 2: get all solutions with first queen at (0, 3)
    # all_sols = solve_n_queens_with_first(8, (0, 3), find_all=True)
    # print(f"Found {len(all_sols)} solutions.")
