int: n; enum Men = anon_enum(n); enum Women = anon_enum(n); array[Women, Men] of int: rankWomen; array[Men, Women] of int: rankMen; array[Men] of var Women: wife; array[Women] of var Men: husband; % assignment constraint forall (m in Men) (husband[wife[m]]=m); constraint forall (w in Women) (wife[husband[w]]=w); % ranking constraint forall (m in Men, o in Women) ( rankMen[m,o] < rankMen[m,wife[m]] -> rankWomen[o,husband[o]] < rankWomen[o,m] ); constraint forall (w in Women, o in Men) ( rankWomen[w,o] < rankWomen[w,husband[w]] -> rankMen[o,wife[o]] < rankMen[o,w] ); solve satisfy; output ["wives= \(wife)\nhusbands= \(husband)\n"];