predicate all_different_int(array [int] of var int: x); predicate count(array [int] of var int: x, var int: y, var int: c); predicate fixed_cumulative(array [int] of var int: s, array [int] of int: d, array [int] of int: r, int: b); predicate global_cardinality(array [int] of var int: x, array [int] of int: cover, array [int] of var int: counts); predicate maximum_int(var int: m, array [int] of var int: x); predicate minimum_int(var int: m, array [int] of var int: x); predicate sliding_sum(int: low, int: up, int: seq, array [int] of var int: vs); predicate sort(array [int] of var int: x, array [int] of var int: y); predicate table_bool(array [int] of var bool: x, array [int, int] of bool: t); predicate table_int(array [int] of var int: x, array [int, int] of int: t); predicate var_cumulative(array [int] of var int: s, array [int] of int: d, array [int] of int: r, var int: b); array [1..12] of int: col_hint_sums = [23, 11, 30, 10, 15, 17, 7, 27, 12, 12, 16, 7]; array [1..49] of int: hints_col = [13, 15, -1, -1, 20, 21, 23, 13, 15, -1, 18, 20, 21, 23, 13, 15, 17, 18, 20, -1, -1, -1, 15, 17, -1, 20, 22, -1, -1, -1, 17, 19, 20, 22, 24, 14, 16, 17, 19, -1, 22, 24, 14, 16, 17, -1, -1, 22, 24]; array [1..49] of int: hints_row = [1, 1, -1, -1, 2, 2, 2, 3, 3, -1, 4, 4, 4, 4, 5, 5, 5, 5, 5, -1, -1, -1, 6, 6, -1, 7, 7, -1, -1, -1, 8, 8, 8, 8, 8, 9, 9, 9, 9, -1, 10, 10, 11, 11, 11, -1, -1, 12, 12]; array [1..12] of int: row_hint_sums = [16, 24, 17, 29, 35, 7, 8, 16, 21, 5, 6, 3]; array [1..49] of var 0..9: x :: output_array([1..7, 1..7]); constraint all_different_int([x[1], x[2]]); constraint all_different_int([x[6], x[13]]); constraint all_different_int([x[7], x[14]]); constraint all_different_int([x[8], x[9]]); constraint all_different_int([x[11], x[18]]); constraint all_different_int([x[23], x[24]]); constraint all_different_int([x[26], x[27]]); constraint all_different_int([x[32], x[39]]); constraint all_different_int([x[36], x[43]]); constraint all_different_int([x[37], x[44]]); constraint all_different_int([x[41], x[42]]); constraint all_different_int([x[48], x[49]]); constraint all_different_int([x[1], x[8], x[15]]); constraint all_different_int([x[5], x[6], x[7]]); constraint all_different_int([x[35], x[42], x[49]]); constraint all_different_int([x[43], x[44], x[45]]); constraint all_different_int([x[2], x[9], x[16], x[23]]); constraint all_different_int([x[11], x[12], x[13], x[14]]); constraint all_different_int([x[27], x[34], x[41], x[48]]); constraint all_different_int([x[36], x[37], x[38], x[39]]); constraint all_different_int([x[5], x[12], x[19], x[26], x[33]]); constraint all_different_int([x[15], x[16], x[17], x[18], x[19]]); constraint all_different_int([x[17], x[24], x[31], x[38], x[45]]); constraint all_different_int([x[31], x[32], x[33], x[34], x[35]]); constraint int_eq(x[3], 0); constraint int_eq(x[4], 0); constraint int_eq(x[10], 0); constraint int_eq(x[20], 0); constraint int_eq(x[21], 0); constraint int_eq(x[22], 0); constraint int_eq(x[25], 0); constraint int_eq(x[28], 0); constraint int_eq(x[29], 0); constraint int_eq(x[30], 0); constraint int_eq(x[40], 0); constraint int_eq(x[46], 0); constraint int_eq(x[47], 0); constraint int_lin_eq([-1, -1], [x[1], x[2]], -16); constraint int_lin_eq([-1, -1], [x[6], x[13]], -12); constraint int_lin_eq([-1, -1], [x[7], x[14]], -16); constraint int_lin_eq([-1, -1], [x[8], x[9]], -17); constraint int_lin_eq([-1, -1], [x[11], x[18]], -17); constraint int_lin_eq([-1, -1], [x[23], x[24]], -7); constraint int_lin_eq([-1, -1], [x[26], x[27]], -8); constraint int_lin_eq([-1, -1], [x[32], x[39]], -7); constraint int_lin_eq([-1, -1], [x[36], x[43]], -11); constraint int_lin_eq([-1, -1], [x[37], x[44]], -10); constraint int_lin_eq([-1, -1], [x[41], x[42]], -5); constraint int_lin_eq([-1, -1], [x[48], x[49]], -3); constraint int_lin_eq([-1, -1, -1], [x[1], x[8], x[15]], -23); constraint int_lin_eq([-1, -1, -1], [x[5], x[6], x[7]], -24); constraint int_lin_eq([-1, -1, -1], [x[35], x[42], x[49]], -7); constraint int_lin_eq([-1, -1, -1], [x[43], x[44], x[45]], -6); constraint int_lin_eq([-1, -1, -1, -1], [x[2], x[9], x[16], x[23]], -30); constraint int_lin_eq([-1, -1, -1, -1], [x[11], x[12], x[13], x[14]], -29); constraint int_lin_eq([-1, -1, -1, -1], [x[27], x[34], x[41], x[48]], -12); constraint int_lin_eq([-1, -1, -1, -1], [x[36], x[37], x[38], x[39]], -21); constraint int_lin_eq([-1, -1, -1, -1, -1], [x[5], x[12], x[19], x[26], x[33]], -27); constraint int_lin_eq([-1, -1, -1, -1, -1], [x[15], x[16], x[17], x[18], x[19]], -35); constraint int_lin_eq([-1, -1, -1, -1, -1], [x[17], x[24], x[31], x[38], x[45]], -15); constraint int_lin_eq([-1, -1, -1, -1, -1], [x[31], x[32], x[33], x[34], x[35]], -16); constraint int_lt(0, x[1]); constraint int_lt(0, x[2]); constraint int_lt(0, x[5]); constraint int_lt(0, x[6]); constraint int_lt(0, x[7]); constraint int_lt(0, x[8]); constraint int_lt(0, x[9]); constraint int_lt(0, x[11]); constraint int_lt(0, x[12]); constraint int_lt(0, x[13]); constraint int_lt(0, x[14]); constraint int_lt(0, x[15]); constraint int_lt(0, x[16]); constraint int_lt(0, x[17]); constraint int_lt(0, x[18]); constraint int_lt(0, x[19]); constraint int_lt(0, x[23]); constraint int_lt(0, x[24]); constraint int_lt(0, x[26]); constraint int_lt(0, x[27]); constraint int_lt(0, x[31]); constraint int_lt(0, x[32]); constraint int_lt(0, x[33]); constraint int_lt(0, x[34]); constraint int_lt(0, x[35]); constraint int_lt(0, x[36]); constraint int_lt(0, x[37]); constraint int_lt(0, x[38]); constraint int_lt(0, x[39]); constraint int_lt(0, x[41]); constraint int_lt(0, x[42]); constraint int_lt(0, x[43]); constraint int_lt(0, x[44]); constraint int_lt(0, x[45]); constraint int_lt(0, x[48]); constraint int_lt(0, x[49]); solve :: int_search([x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16], x[17], x[18], x[19], x[20], x[21], x[22], x[23], x[24], x[25], x[26], x[27], x[28], x[29], x[30], x[31], x[32], x[33], x[34], x[35], x[36], x[37], x[38], x[39], x[40], x[41], x[42], x[43], x[44], x[45], x[46], x[47], x[48], x[49]], first_fail, indomain_max, complete) satisfy;