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..8] of var 1..8: costas :: output_array([1..8]); array [1..64] of var -7..7: differences :: output_array([1..8, 1..8]); constraint all_different_int([differences[56]]); constraint all_different_int([differences[47], differences[48]]); constraint all_different_int([differences[38], differences[39], differences[40]]); constraint all_different_int([differences[29], differences[30], differences[31], differences[32]]); constraint all_different_int([differences[20], differences[21], differences[22], differences[23], differences[24]]); constraint all_different_int([differences[11], differences[12], differences[13], differences[14], differences[15], differences[16]]); constraint all_different_int([differences[2], differences[3], differences[4], differences[5], differences[6], differences[7], differences[8]]); constraint all_different_int(costas); constraint int_eq(differences[1], -7); constraint int_eq(differences[9], -7); constraint int_eq(differences[10], -7); constraint int_eq(differences[17], -7); constraint int_eq(differences[18], -7); constraint int_eq(differences[19], -7); constraint int_eq(differences[25], -7); constraint int_eq(differences[26], -7); constraint int_eq(differences[27], -7); constraint int_eq(differences[28], -7); constraint int_eq(differences[33], -7); constraint int_eq(differences[34], -7); constraint int_eq(differences[35], -7); constraint int_eq(differences[36], -7); constraint int_eq(differences[37], -7); constraint int_eq(differences[41], -7); constraint int_eq(differences[42], -7); constraint int_eq(differences[43], -7); constraint int_eq(differences[44], -7); constraint int_eq(differences[45], -7); constraint int_eq(differences[46], -7); constraint int_eq(differences[49], -7); constraint int_eq(differences[50], -7); constraint int_eq(differences[51], -7); constraint int_eq(differences[52], -7); constraint int_eq(differences[53], -7); constraint int_eq(differences[54], -7); constraint int_eq(differences[55], -7); constraint int_eq(differences[57], -7); constraint int_eq(differences[58], -7); constraint int_eq(differences[59], -7); constraint int_eq(differences[60], -7); constraint int_eq(differences[61], -7); constraint int_eq(differences[62], -7); constraint int_eq(differences[63], -7); constraint int_eq(differences[64], -7); constraint int_lin_eq([1, -1, 1], [costas[1], costas[2], differences[2]], 0); constraint int_lin_eq([1, -1, 1], [costas[1], costas[3], differences[11]], 0); constraint int_lin_eq([1, -1, 1], [costas[1], costas[4], differences[20]], 0); constraint int_lin_eq([1, -1, 1], [costas[1], costas[5], differences[29]], 0); constraint int_lin_eq([1, -1, 1], [costas[1], costas[6], differences[38]], 0); constraint int_lin_eq([1, -1, 1], [costas[1], costas[7], differences[47]], 0); constraint int_lin_eq([1, -1, 1], [costas[1], costas[8], differences[56]], 0); constraint int_lin_eq([1, -1, 1], [costas[2], costas[3], differences[3]], 0); constraint int_lin_eq([1, -1, 1], [costas[2], costas[4], differences[12]], 0); constraint int_lin_eq([1, -1, 1], [costas[2], costas[5], differences[21]], 0); constraint int_lin_eq([1, -1, 1], [costas[2], costas[6], differences[30]], 0); constraint int_lin_eq([1, -1, 1], [costas[2], costas[7], differences[39]], 0); constraint int_lin_eq([1, -1, 1], [costas[2], costas[8], differences[48]], 0); constraint int_lin_eq([1, -1, 1], [costas[3], costas[4], differences[4]], 0); constraint int_lin_eq([1, -1, 1], [costas[3], costas[5], differences[13]], 0); constraint int_lin_eq([1, -1, 1], [costas[3], costas[6], differences[22]], 0); constraint int_lin_eq([1, -1, 1], [costas[3], costas[7], differences[31]], 0); constraint int_lin_eq([1, -1, 1], [costas[3], costas[8], differences[40]], 0); constraint int_lin_eq([1, -1, 1], [costas[4], costas[5], differences[5]], 0); constraint int_lin_eq([1, -1, 1], [costas[4], costas[6], differences[14]], 0); constraint int_lin_eq([1, -1, 1], [costas[4], costas[7], differences[23]], 0); constraint int_lin_eq([1, -1, 1], [costas[4], costas[8], differences[32]], 0); constraint int_lin_eq([1, -1, 1], [costas[5], costas[6], differences[6]], 0); constraint int_lin_eq([1, -1, 1], [costas[5], costas[7], differences[15]], 0); constraint int_lin_eq([1, -1, 1], [costas[5], costas[8], differences[24]], 0); constraint int_lin_eq([1, -1, 1], [costas[6], costas[7], differences[7]], 0); constraint int_lin_eq([1, -1, 1], [costas[6], costas[8], differences[16]], 0); constraint int_lin_eq([1, -1, 1], [costas[7], costas[8], differences[8]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[3], differences[11], differences[12], differences[20]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[4], differences[12], differences[13], differences[21]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[5], differences[13], differences[14], differences[22]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[6], differences[14], differences[15], differences[23]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[7], differences[15], differences[16], differences[24]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[12], differences[20], differences[21], differences[29]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[13], differences[21], differences[22], differences[30]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[14], differences[22], differences[23], differences[31]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[15], differences[23], differences[24], differences[32]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[21], differences[29], differences[30], differences[38]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[22], differences[30], differences[31], differences[39]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[23], differences[31], differences[32], differences[40]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[30], differences[38], differences[39], differences[47]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[31], differences[39], differences[40], differences[48]], 0); constraint int_lin_eq([1, -1, -1, 1], [differences[39], differences[47], differences[48], differences[56]], 0); constraint int_ne(differences[2], 0); constraint int_ne(differences[3], 0); constraint int_ne(differences[4], 0); constraint int_ne(differences[5], 0); constraint int_ne(differences[6], 0); constraint int_ne(differences[7], 0); constraint int_ne(differences[8], 0); constraint int_ne(differences[11], 0); constraint int_ne(differences[12], 0); constraint int_ne(differences[13], 0); constraint int_ne(differences[14], 0); constraint int_ne(differences[15], 0); constraint int_ne(differences[16], 0); constraint int_ne(differences[20], 0); constraint int_ne(differences[21], 0); constraint int_ne(differences[22], 0); constraint int_ne(differences[23], 0); constraint int_ne(differences[24], 0); constraint int_ne(differences[29], 0); constraint int_ne(differences[30], 0); constraint int_ne(differences[31], 0); constraint int_ne(differences[32], 0); constraint int_ne(differences[38], 0); constraint int_ne(differences[39], 0); constraint int_ne(differences[40], 0); constraint int_ne(differences[47], 0); constraint int_ne(differences[48], 0); constraint int_ne(differences[56], 0); solve :: int_search([differences[1], differences[2], differences[3], differences[4], differences[5], differences[6], differences[7], differences[8], differences[9], differences[10], differences[11], differences[12], differences[13], differences[14], differences[15], differences[16], differences[17], differences[18], differences[19], differences[20], differences[21], differences[22], differences[23], differences[24], differences[25], differences[26], differences[27], differences[28], differences[29], differences[30], differences[31], differences[32], differences[33], differences[34], differences[35], differences[36], differences[37], differences[38], differences[39], differences[40], differences[41], differences[42], differences[43], differences[44], differences[45], differences[46], differences[47], differences[48], differences[49], differences[50], differences[51], differences[52], differences[53], differences[54], differences[55], differences[56], differences[57], differences[58], differences[59], differences[60], differences[61], differences[62], differences[63], differences[64], costas[1], costas[2], costas[3], costas[4], costas[5], costas[6], costas[7], costas[8]], first_fail, indomain_min, complete) satisfy;