Forward Checking: propagate information from assigned to unassigned variables. We keep track of remaining legal values for unassigned variables and terminate the search when any variable has no legal values.