Mutuality constraint

In reply to gotlibhaim:
I forgot that the dist constraint is not a hard constraint. Try re-writing as

 constraint c1 { foreach(pA[i]) if(pA[i] == C)  pB[i] inside {C,D}; }
 constraint c2 { foreach(pB[i]) if(pB[i] == C)  pA[i] inside {C,D}; }

Which gives me

# C D
# C D
# C C
# D B
# A A
# D D
# A B
# C C
# B B
# D A
# A D
# C D
# D C
# B D
# C C
# A A
# C D
# A A
# C D
# B D
# B A
# D C
# B D
# B D
# D B
# C D
# A B
# B B
# A A
# A B
# D A
# A A
# D C
# C C
# D C
# D D
# A A
# C C
# A D
# A A
# B A
# D C
# D A
# D D
# A B
# B B
# B B
# C D
# B D
# A B