first_fail(Vars, X) :-
   select(X, Vars, Other_vars),
   CardX = card(X),
   CardX > 1,
   check_card_greater_than(Other_vars, CardX).

check_card_greater_than([], _).

check_card_greater_than([H | T], Min) :-
   CardH = card(H),
   (CardH < Min -> CardH = 1),
   check_card_greater_than(T, Min).