model = cp_model.CpModel()
s1 = model.NewIntVar(1, 5, 's1')
s2 = model.NewIntVar(1, 5, 's2')
s3 = model.NewIntVar(1, 5, 's3')
v1 = model.NewBoolVar('v1')
v2 = model.NewBoolVar('v2')
v3 = model.NewBoolVar('v3')
# This constraint is added for testing purposes; a feasible solution is s1 = s2 = 1 and s3 = 2
model.Add(s1 == s2)
model.AddAllDifferent([s1, s2]).OnlyEnforceIf(v1)
model.AddAllDifferent([s2, s3]).OnlyEnforceIf(v2)
model.AddAllDifferent([s1, s3]).OnlyEnforceIf(v3)
model.AddBoolOr([v1, v2, v3])
solver = cp_model.CpSolver()
status = solver.Solve(model)