procedure backtrack(P, c) is | if reject(P, c) then return | if accept(P, c) then output(P, c) | s gets first(P, c) | while s ≠ NULL do | backtrack(P, s) | s gets next(P, s)