program StableMatching (WifeOf[]); begin { first we list the women's ranking of the men } f[1][1] = 4; f[1][2] = 2; f[1][3] = 3; f[1][4] = 1; f[2][1] = 1; f[2][2] = 3; f[2][3] = 4; f[2][4] = 2; f[3][1] = 1; f[3][2] = 2; f[3][3] = 3; f[3][4] = 4; f[4][1] = 2; f[4][2] = 1; f[4][3] = 4; f[4][4] = 3; { second we list the men's ranking of the women } m[1][1] = 2; m[1][2] = 1; m[1][3] = 4; m[1][4] = 3; m[2][1] = 2; m[2][2] = 1; m[2][3] = 3; m[2][4] = 4; m[3][1] = 2; m[3][2] = 1; m[3][3] = 3; m[3][4] = 4; m[4][1] = 3; m[4][2] = 1; m[4][3] = 2; m[4][4] = 4; n = 4; m = 0; do n times { record that all men are bachelors } begin m >> m0 = m0 + 1; b[m] = 1 end; some w; w = 0; do n times { try to marry off the women one by one } begin w >> w0 = w0 + 1; find m in [1 .. n] with begin some i; f[w][m] = i; { m is w's i-th preference } b[m] = 1; { m is still a bachelor } w = WifeOf[m]; { propose woman w to man m } some b[m]; b[m] = 0; { m is no bachelor anymore } donot find rival in [1 .. n] with begin test f[w][rival] < i;{ w prevers rival to m } either b[rival] = 1 { rival is still unmarried } orelse begin b[rival] = 0; { or .. rival is married } test m[rival][w] < m[rival][WifeOf[rival]]; { rival prefers w to his own Wife } end end end end end