def prop_FC(csp, newVar=None):
    """
    Do forward checking. That is check constraints with
    only one uninstantiated variable. Remember to keep
    track of all pruned variable,value pairs and return
    """
    constraints = csp.get_cons_with_var(newVar) if newVar else csp.get_all_cons()
    pruned = []

    for constraint in constraints:
        if constraint.get_n_unasgn() != 1:
            continue                # skip to the next constraint

        # If we get here, get the single unassigned variable
        var = constraint.get_unasgn_vars()[0]
        for val in var.cur_domain():
            # Check if the var = val satisfies the constraint
            if not constraint.has_support(var, val):
                if (var, val) not in pruned:
                    # Then prune this value from var's domain
                    var.prune_value(val)
                    pruned.append((var, val))

        # After looking at all values in the var's domain, check if it is now empty
        if var.cur_domain_size() == 0:
            return False, pruned

    return True, pruned