def test_cnf(self): board0 = SudokuBoard([[0, 0, 0, 3], [0, 0, 0, 2], [3, 0, 0, 0], [4, 0, 0, 0]]) expected = ['!d1_1_1 || !d1_1_2', '!d1_1_1 || !d1_1_3', '!d1_1_1 || !d1_1_4', '!d1_1_1 || !d1_2_1', '!d1_1_1 || !d1_2_2', '!d1_1_1 || !d1_3_1', '!d1_1_1 || !d1_4_1', '!d1_1_2 || !d1_1_3', '!d1_1_2 || !d1_1_4', '!d1_1_2 || !d1_2_1', '!d1_1_2 || !d1_2_2', '!d1_1_2 || !d1_3_2', '!d1_1_2 || !d1_4_2', '!d1_1_3 || !d1_1_4', '!d1_1_3 || !d1_2_3', '!d1_1_3 || !d1_2_4', '!d1_1_3 || !d1_3_3', '!d1_1_3 || !d1_4_3', '!d1_1_4 || !d1_2_3', '!d1_1_4 || !d1_2_4', '!d1_1_4 || !d1_3_4', '!d1_1_4 || !d1_4_4', '!d1_2_1 || !d1_2_2', '!d1_2_1 || !d1_2_3', '!d1_2_1 || !d1_2_4', '!d1_2_1 || !d1_3_1', '!d1_2_1 || !d1_4_1', '!d1_2_2 || !d1_2_3', '!d1_2_2 || !d1_2_4', '!d1_2_2 || !d1_3_2', '!d1_2_2 || !d1_4_2', '!d1_2_3 || !d1_2_4', '!d1_2_3 || !d1_3_3', '!d1_2_3 || !d1_4_3', '!d1_2_4 || !d1_3_4', '!d1_2_4 || !d1_4_4', '!d1_3_1 || !d1_3_2', '!d1_3_1 || !d1_3_3', '!d1_3_1 || !d1_3_4', '!d1_3_1 || !d1_4_1', '!d1_3_1 || !d1_4_2', '!d1_3_2 || !d1_3_3', '!d1_3_2 || !d1_3_4', '!d1_3_2 || !d1_4_1', '!d1_3_2 || !d1_4_2', '!d1_3_3 || !d1_3_4', '!d1_3_3 || !d1_4_3', '!d1_3_3 || !d1_4_4', '!d1_3_4 || !d1_4_3', '!d1_3_4 || !d1_4_4', '!d1_4_1 || !d1_4_2', '!d1_4_1 || !d1_4_3', '!d1_4_1 || !d1_4_4', '!d1_4_2 || !d1_4_3', '!d1_4_2 || !d1_4_4', '!d1_4_3 || !d1_4_4', '!d2_1_1 || !d2_1_2', '!d2_1_1 || !d2_1_3', '!d2_1_1 || !d2_1_4', '!d2_1_1 || !d2_2_1', '!d2_1_1 || !d2_2_2', '!d2_1_1 || !d2_3_1', '!d2_1_1 || !d2_4_1', '!d2_1_2 || !d2_1_3', '!d2_1_2 || !d2_1_4', '!d2_1_2 || !d2_2_1', '!d2_1_2 || !d2_2_2', '!d2_1_2 || !d2_3_2', '!d2_1_2 || !d2_4_2', '!d2_1_3 || !d2_1_4', '!d2_1_3 || !d2_2_3', '!d2_1_3 || !d2_2_4', '!d2_1_3 || !d2_3_3', '!d2_1_3 || !d2_4_3', '!d2_1_4 || !d2_2_3', '!d2_1_4 || !d2_2_4', '!d2_1_4 || !d2_3_4', '!d2_1_4 || !d2_4_4', '!d2_2_1 || !d2_2_2', '!d2_2_1 || !d2_2_3', '!d2_2_1 || !d2_2_4', '!d2_2_1 || !d2_3_1', '!d2_2_1 || !d2_4_1', '!d2_2_2 || !d2_2_3', '!d2_2_2 || !d2_2_4', '!d2_2_2 || !d2_3_2', '!d2_2_2 || !d2_4_2', '!d2_2_3 || !d2_2_4', '!d2_2_3 || !d2_3_3', '!d2_2_3 || !d2_4_3', '!d2_2_4 || !d2_3_4', '!d2_2_4 || !d2_4_4', '!d2_3_1 || !d2_3_2', '!d2_3_1 || !d2_3_3', '!d2_3_1 || !d2_3_4', '!d2_3_1 || !d2_4_1', '!d2_3_1 || !d2_4_2', '!d2_3_2 || !d2_3_3', '!d2_3_2 || !d2_3_4', '!d2_3_2 || !d2_4_1', '!d2_3_2 || !d2_4_2', '!d2_3_3 || !d2_3_4', '!d2_3_3 || !d2_4_3', '!d2_3_3 || !d2_4_4', '!d2_3_4 || !d2_4_3', '!d2_3_4 || !d2_4_4', '!d2_4_1 || !d2_4_2', '!d2_4_1 || !d2_4_3', '!d2_4_1 || !d2_4_4', '!d2_4_2 || !d2_4_3', '!d2_4_2 || !d2_4_4', '!d2_4_3 || !d2_4_4', '!d3_1_1 || !d3_1_2', '!d3_1_1 || !d3_1_3', '!d3_1_1 || !d3_1_4', '!d3_1_1 || !d3_2_1', '!d3_1_1 || !d3_2_2', '!d3_1_1 || !d3_3_1', '!d3_1_1 || !d3_4_1', '!d3_1_2 || !d3_1_3', '!d3_1_2 || !d3_1_4', '!d3_1_2 || !d3_2_1', '!d3_1_2 || !d3_2_2', '!d3_1_2 || !d3_3_2', '!d3_1_2 || !d3_4_2', '!d3_1_3 || !d3_1_4', '!d3_1_3 || !d3_2_3', '!d3_1_3 || !d3_2_4', '!d3_1_3 || !d3_3_3', '!d3_1_3 || !d3_4_3', '!d3_1_4 || !d3_2_3', '!d3_1_4 || !d3_2_4', '!d3_1_4 || !d3_3_4', '!d3_1_4 || !d3_4_4', '!d3_2_1 || !d3_2_2', '!d3_2_1 || !d3_2_3', '!d3_2_1 || !d3_2_4', '!d3_2_1 || !d3_3_1', '!d3_2_1 || !d3_4_1', '!d3_2_2 || !d3_2_3', '!d3_2_2 || !d3_2_4', '!d3_2_2 || !d3_3_2', '!d3_2_2 || !d3_4_2', '!d3_2_3 || !d3_2_4', '!d3_2_3 || !d3_3_3', '!d3_2_3 || !d3_4_3', '!d3_2_4 || !d3_3_4', '!d3_2_4 || !d3_4_4', '!d3_3_1 || !d3_3_2', '!d3_3_1 || !d3_3_3', '!d3_3_1 || !d3_3_4', '!d3_3_1 || !d3_4_1', '!d3_3_1 || !d3_4_2', '!d3_3_2 || !d3_3_3', '!d3_3_2 || !d3_3_4', '!d3_3_2 || !d3_4_1', '!d3_3_2 || !d3_4_2', '!d3_3_3 || !d3_3_4', '!d3_3_3 || !d3_4_3', '!d3_3_3 || !d3_4_4', '!d3_3_4 || !d3_4_3', '!d3_3_4 || !d3_4_4', '!d3_4_1 || !d3_4_2', '!d3_4_1 || !d3_4_3', '!d3_4_1 || !d3_4_4', '!d3_4_2 || !d3_4_3', '!d3_4_2 || !d3_4_4', '!d3_4_3 || !d3_4_4', '!d4_1_1 || !d4_1_2', '!d4_1_1 || !d4_1_3', '!d4_1_1 || !d4_1_4', '!d4_1_1 || !d4_2_1', '!d4_1_1 || !d4_2_2', '!d4_1_1 || !d4_3_1', '!d4_1_1 || !d4_4_1', '!d4_1_2 || !d4_1_3', '!d4_1_2 || !d4_1_4', '!d4_1_2 || !d4_2_1', '!d4_1_2 || !d4_2_2', '!d4_1_2 || !d4_3_2', '!d4_1_2 || !d4_4_2', '!d4_1_3 || !d4_1_4', '!d4_1_3 || !d4_2_3', '!d4_1_3 || !d4_2_4', '!d4_1_3 || !d4_3_3', '!d4_1_3 || !d4_4_3', '!d4_1_4 || !d4_2_3', '!d4_1_4 || !d4_2_4', '!d4_1_4 || !d4_3_4', '!d4_1_4 || !d4_4_4', '!d4_2_1 || !d4_2_2', '!d4_2_1 || !d4_2_3', '!d4_2_1 || !d4_2_4', '!d4_2_1 || !d4_3_1', '!d4_2_1 || !d4_4_1', '!d4_2_2 || !d4_2_3', '!d4_2_2 || !d4_2_4', '!d4_2_2 || !d4_3_2', '!d4_2_2 || !d4_4_2', '!d4_2_3 || !d4_2_4', '!d4_2_3 || !d4_3_3', '!d4_2_3 || !d4_4_3', '!d4_2_4 || !d4_3_4', '!d4_2_4 || !d4_4_4', '!d4_3_1 || !d4_3_2', '!d4_3_1 || !d4_3_3', '!d4_3_1 || !d4_3_4', '!d4_3_1 || !d4_4_1', '!d4_3_1 || !d4_4_2', '!d4_3_2 || !d4_3_3', '!d4_3_2 || !d4_3_4', '!d4_3_2 || !d4_4_1', '!d4_3_2 || !d4_4_2', '!d4_3_3 || !d4_3_4', '!d4_3_3 || !d4_4_3', '!d4_3_3 || !d4_4_4', '!d4_3_4 || !d4_4_3', '!d4_3_4 || !d4_4_4', '!d4_4_1 || !d4_4_2', '!d4_4_1 || !d4_4_3', '!d4_4_1 || !d4_4_4', '!d4_4_2 || !d4_4_3', '!d4_4_2 || !d4_4_4', '!d4_4_3 || !d4_4_4', "d1_1_1 || d1_1_2 || d1_1_3 || d1_1_4", "d1_1_1 || d1_1_2 || d1_2_1 || d1_2_2", "d1_1_1 || d1_2_1 || d1_3_1 || d1_4_1", "d1_1_1 || d2_1_1 || d3_1_1 || d4_1_1", "d1_1_2 || d1_2_2 || d1_3_2 || d1_4_2", "d1_1_2 || d2_1_2 || d3_1_2 || d4_1_2", "d1_1_3 || d1_1_4 || d1_2_3 || d1_2_4", "d1_1_3 || d1_2_3 || d1_3_3 || d1_4_3", "d1_1_3 || d2_1_3 || d3_1_3 || d4_1_3", "d1_1_4 || d1_2_4 || d1_3_4 || d1_4_4", "d1_1_4 || d2_1_4 || d3_1_4 || d4_1_4", "d1_2_1 || d1_2_2 || d1_2_3 || d1_2_4", "d1_2_1 || d2_2_1 || d3_2_1 || d4_2_1", "d1_2_2 || d2_2_2 || d3_2_2 || d4_2_2", "d1_2_3 || d2_2_3 || d3_2_3 || d4_2_3", "d1_2_4 || d2_2_4 || d3_2_4 || d4_2_4", "d1_3_1 || d1_3_2 || d1_3_3 || d1_3_4", "d1_3_1 || d1_3_2 || d1_4_1 || d1_4_2", "d1_3_1 || d2_3_1 || d3_3_1 || d4_3_1", "d1_3_2 || d2_3_2 || d3_3_2 || d4_3_2", "d1_3_3 || d1_3_4 || d1_4_3 || d1_4_4", "d1_3_3 || d2_3_3 || d3_3_3 || d4_3_3", "d1_3_4 || d2_3_4 || d3_3_4 || d4_3_4", "d1_4_1 || d1_4_2 || d1_4_3 || d1_4_4", "d1_4_1 || d2_4_1 || d3_4_1 || d4_4_1", "d1_4_2 || d2_4_2 || d3_4_2 || d4_4_2", "d1_4_3 || d2_4_3 || d3_4_3 || d4_4_3", "d1_4_4 || d2_4_4 || d3_4_4 || d4_4_4", "d2_1_1 || d2_1_2 || d2_1_3 || d2_1_4", "d2_1_1 || d2_1_2 || d2_2_1 || d2_2_2", "d2_1_1 || d2_2_1 || d2_3_1 || d2_4_1", "d2_1_2 || d2_2_2 || d2_3_2 || d2_4_2", "d2_1_3 || d2_1_4 || d2_2_3 || d2_2_4", "d2_1_3 || d2_2_3 || d2_3_3 || d2_4_3", "d2_1_4 || d2_2_4 || d2_3_4 || d2_4_4", "d2_2_1 || d2_2_2 || d2_2_3 || d2_2_4", "d2_2_4", "d2_3_1 || d2_3_2 || d2_3_3 || d2_3_4", "d2_3_1 || d2_3_2 || d2_4_1 || d2_4_2", "d2_3_3 || d2_3_4 || d2_4_3 || d2_4_4", "d2_4_1 || d2_4_2 || d2_4_3 || d2_4_4", "d3_1_1 || d3_1_2 || d3_1_3 || d3_1_4", "d3_1_1 || d3_1_2 || d3_2_1 || d3_2_2", "d3_1_1 || d3_2_1 || d3_3_1 || d3_4_1", "d3_1_2 || d3_2_2 || d3_3_2 || d3_4_2", "d3_1_3 || d3_1_4 || d3_2_3 || d3_2_4", "d3_1_3 || d3_2_3 || d3_3_3 || d3_4_3", "d3_1_4", "d3_1_4 || d3_2_4 || d3_3_4 || d3_4_4", "d3_2_1 || d3_2_2 || d3_2_3 || d3_2_4", "d3_3_1", "d3_3_1 || d3_3_2 || d3_3_3 || d3_3_4", "d3_3_1 || d3_3_2 || d3_4_1 || d3_4_2", "d3_3_3 || d3_3_4 || d3_4_3 || d3_4_4", "d3_4_1 || d3_4_2 || d3_4_3 || d3_4_4", "d4_1_1 || d4_1_2 || d4_1_3 || d4_1_4", "d4_1_1 || d4_1_2 || d4_2_1 || d4_2_2", "d4_1_1 || d4_2_1 || d4_3_1 || d4_4_1", "d4_1_2 || d4_2_2 || d4_3_2 || d4_4_2", "d4_1_3 || d4_1_4 || d4_2_3 || d4_2_4", "d4_1_3 || d4_2_3 || d4_3_3 || d4_4_3", "d4_1_4 || d4_2_4 || d4_3_4 || d4_4_4", "d4_2_1 || d4_2_2 || d4_2_3 || d4_2_4", "d4_3_1 || d4_3_2 || d4_3_3 || d4_3_4", "d4_3_1 || d4_3_2 || d4_4_1 || d4_4_2", "d4_3_3 || d4_3_4 || d4_4_3 || d4_4_4", "d4_4_1", "d4_4_1 || d4_4_2 || d4_4_3 || d4_4_4"] assert '\n'.join(expected) == str(board0.cnf())
def test_constraints(self): board0 = SudokuBoard([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]) #cnf = sorted([str(c) for c in board0.cnf()]) expected = [ "!d1_1_1 || !d1_1_2", "!d1_1_1 || !d1_1_2", "!d1_1_1 || !d1_1_3", "!d1_1_1 || !d1_1_4", "!d1_1_1 || !d1_2_1", "!d1_1_1 || !d1_2_1", "!d1_1_1 || !d1_2_2", "!d1_1_1 || !d1_3_1", "!d1_1_1 || !d1_4_1", "!d1_1_2 || !d1_1_3", "!d1_1_2 || !d1_1_4", "!d1_1_2 || !d1_2_1", "!d1_1_2 || !d1_2_2", "!d1_1_2 || !d1_2_2", "!d1_1_2 || !d1_3_2", "!d1_1_2 || !d1_4_2", "!d1_1_3 || !d1_1_4", "!d1_1_3 || !d1_1_4", "!d1_1_3 || !d1_2_3", "!d1_1_3 || !d1_2_3", "!d1_1_3 || !d1_2_4", "!d1_1_3 || !d1_3_3", "!d1_1_3 || !d1_4_3", "!d1_1_4 || !d1_2_3", "!d1_1_4 || !d1_2_4", "!d1_1_4 || !d1_2_4", "!d1_1_4 || !d1_3_4", "!d1_1_4 || !d1_4_4", "!d1_2_1 || !d1_2_2", "!d1_2_1 || !d1_2_2", "!d1_2_1 || !d1_2_3", "!d1_2_1 || !d1_2_4", "!d1_2_1 || !d1_3_1", "!d1_2_1 || !d1_4_1", "!d1_2_2 || !d1_2_3", "!d1_2_2 || !d1_2_4", "!d1_2_2 || !d1_3_2", "!d1_2_2 || !d1_4_2", "!d1_2_3 || !d1_2_4", "!d1_2_3 || !d1_2_4", "!d1_2_3 || !d1_3_3", "!d1_2_3 || !d1_4_3", "!d1_2_4 || !d1_3_4", "!d1_2_4 || !d1_4_4", "!d1_3_1 || !d1_3_2", "!d1_3_1 || !d1_3_2", "!d1_3_1 || !d1_3_3", "!d1_3_1 || !d1_3_4", "!d1_3_1 || !d1_4_1", "!d1_3_1 || !d1_4_1", "!d1_3_1 || !d1_4_2", "!d1_3_2 || !d1_3_3", "!d1_3_2 || !d1_3_4", "!d1_3_2 || !d1_4_1", "!d1_3_2 || !d1_4_2", "!d1_3_2 || !d1_4_2", "!d1_3_3 || !d1_3_4", "!d1_3_3 || !d1_3_4", "!d1_3_3 || !d1_4_3", "!d1_3_3 || !d1_4_3", "!d1_3_3 || !d1_4_4", "!d1_3_4 || !d1_4_3", "!d1_3_4 || !d1_4_4", "!d1_3_4 || !d1_4_4", "!d1_4_1 || !d1_4_2", "!d1_4_1 || !d1_4_2", "!d1_4_1 || !d1_4_3", "!d1_4_1 || !d1_4_4", "!d1_4_2 || !d1_4_3", "!d1_4_2 || !d1_4_4", "!d1_4_3 || !d1_4_4", "!d1_4_3 || !d1_4_4", "!d2_1_1 || !d2_1_2", "!d2_1_1 || !d2_1_2", "!d2_1_1 || !d2_1_3", "!d2_1_1 || !d2_1_4", "!d2_1_1 || !d2_2_1", "!d2_1_1 || !d2_2_1", "!d2_1_1 || !d2_2_2", "!d2_1_1 || !d2_3_1", "!d2_1_1 || !d2_4_1", "!d2_1_2 || !d2_1_3", "!d2_1_2 || !d2_1_4", "!d2_1_2 || !d2_2_1", "!d2_1_2 || !d2_2_2", "!d2_1_2 || !d2_2_2", "!d2_1_2 || !d2_3_2", "!d2_1_2 || !d2_4_2", "!d2_1_3 || !d2_1_4", "!d2_1_3 || !d2_1_4", "!d2_1_3 || !d2_2_3", "!d2_1_3 || !d2_2_3", "!d2_1_3 || !d2_2_4", "!d2_1_3 || !d2_3_3", "!d2_1_3 || !d2_4_3", "!d2_1_4 || !d2_2_3", "!d2_1_4 || !d2_2_4", "!d2_1_4 || !d2_2_4", "!d2_1_4 || !d2_3_4", "!d2_1_4 || !d2_4_4", "!d2_2_1 || !d2_2_2", "!d2_2_1 || !d2_2_2", "!d2_2_1 || !d2_2_3", "!d2_2_1 || !d2_2_4", "!d2_2_1 || !d2_3_1", "!d2_2_1 || !d2_4_1", "!d2_2_2 || !d2_2_3", "!d2_2_2 || !d2_2_4", "!d2_2_2 || !d2_3_2", "!d2_2_2 || !d2_4_2", "!d2_2_3 || !d2_2_4", "!d2_2_3 || !d2_2_4", "!d2_2_3 || !d2_3_3", "!d2_2_3 || !d2_4_3", "!d2_2_4 || !d2_3_4", "!d2_2_4 || !d2_4_4", "!d2_3_1 || !d2_3_2", "!d2_3_1 || !d2_3_2", "!d2_3_1 || !d2_3_3", "!d2_3_1 || !d2_3_4", "!d2_3_1 || !d2_4_1", "!d2_3_1 || !d2_4_1", "!d2_3_1 || !d2_4_2", "!d2_3_2 || !d2_3_3", "!d2_3_2 || !d2_3_4", "!d2_3_2 || !d2_4_1", "!d2_3_2 || !d2_4_2", "!d2_3_2 || !d2_4_2", "!d2_3_3 || !d2_3_4", "!d2_3_3 || !d2_3_4", "!d2_3_3 || !d2_4_3", "!d2_3_3 || !d2_4_3", "!d2_3_3 || !d2_4_4", "!d2_3_4 || !d2_4_3", "!d2_3_4 || !d2_4_4", "!d2_3_4 || !d2_4_4", "!d2_4_1 || !d2_4_2", "!d2_4_1 || !d2_4_2", "!d2_4_1 || !d2_4_3", "!d2_4_1 || !d2_4_4", "!d2_4_2 || !d2_4_3", "!d2_4_2 || !d2_4_4", "!d2_4_3 || !d2_4_4", "!d2_4_3 || !d2_4_4", "!d3_1_1 || !d3_1_2", "!d3_1_1 || !d3_1_2", "!d3_1_1 || !d3_1_3", "!d3_1_1 || !d3_1_4", "!d3_1_1 || !d3_2_1", "!d3_1_1 || !d3_2_1", "!d3_1_1 || !d3_2_2", "!d3_1_1 || !d3_3_1", "!d3_1_1 || !d3_4_1", "!d3_1_2 || !d3_1_3", "!d3_1_2 || !d3_1_4", "!d3_1_2 || !d3_2_1", "!d3_1_2 || !d3_2_2", "!d3_1_2 || !d3_2_2", "!d3_1_2 || !d3_3_2", "!d3_1_2 || !d3_4_2", "!d3_1_3 || !d3_1_4", "!d3_1_3 || !d3_1_4", "!d3_1_3 || !d3_2_3", "!d3_1_3 || !d3_2_3", "!d3_1_3 || !d3_2_4", "!d3_1_3 || !d3_3_3", "!d3_1_3 || !d3_4_3", "!d3_1_4 || !d3_2_3", "!d3_1_4 || !d3_2_4", "!d3_1_4 || !d3_2_4", "!d3_1_4 || !d3_3_4", "!d3_1_4 || !d3_4_4", "!d3_2_1 || !d3_2_2", "!d3_2_1 || !d3_2_2", "!d3_2_1 || !d3_2_3", "!d3_2_1 || !d3_2_4", "!d3_2_1 || !d3_3_1", "!d3_2_1 || !d3_4_1", "!d3_2_2 || !d3_2_3", "!d3_2_2 || !d3_2_4", "!d3_2_2 || !d3_3_2", "!d3_2_2 || !d3_4_2", "!d3_2_3 || !d3_2_4", "!d3_2_3 || !d3_2_4", "!d3_2_3 || !d3_3_3", "!d3_2_3 || !d3_4_3", "!d3_2_4 || !d3_3_4", "!d3_2_4 || !d3_4_4", "!d3_3_1 || !d3_3_2", "!d3_3_1 || !d3_3_2", "!d3_3_1 || !d3_3_3", "!d3_3_1 || !d3_3_4", "!d3_3_1 || !d3_4_1", "!d3_3_1 || !d3_4_1", "!d3_3_1 || !d3_4_2", "!d3_3_2 || !d3_3_3", "!d3_3_2 || !d3_3_4", "!d3_3_2 || !d3_4_1", "!d3_3_2 || !d3_4_2", "!d3_3_2 || !d3_4_2", "!d3_3_3 || !d3_3_4", "!d3_3_3 || !d3_3_4", "!d3_3_3 || !d3_4_3", "!d3_3_3 || !d3_4_3", "!d3_3_3 || !d3_4_4", "!d3_3_4 || !d3_4_3", "!d3_3_4 || !d3_4_4", "!d3_3_4 || !d3_4_4", "!d3_4_1 || !d3_4_2", "!d3_4_1 || !d3_4_2", "!d3_4_1 || !d3_4_3", "!d3_4_1 || !d3_4_4", "!d3_4_2 || !d3_4_3", "!d3_4_2 || !d3_4_4", "!d3_4_3 || !d3_4_4", "!d3_4_3 || !d3_4_4", "!d4_1_1 || !d4_1_2", "!d4_1_1 || !d4_1_2", "!d4_1_1 || !d4_1_3", "!d4_1_1 || !d4_1_4", "!d4_1_1 || !d4_2_1", "!d4_1_1 || !d4_2_1", "!d4_1_1 || !d4_2_2", "!d4_1_1 || !d4_3_1", "!d4_1_1 || !d4_4_1", "!d4_1_2 || !d4_1_3", "!d4_1_2 || !d4_1_4", "!d4_1_2 || !d4_2_1", "!d4_1_2 || !d4_2_2", "!d4_1_2 || !d4_2_2", "!d4_1_2 || !d4_3_2", "!d4_1_2 || !d4_4_2", "!d4_1_3 || !d4_1_4", "!d4_1_3 || !d4_1_4", "!d4_1_3 || !d4_2_3", "!d4_1_3 || !d4_2_3", "!d4_1_3 || !d4_2_4", "!d4_1_3 || !d4_3_3", "!d4_1_3 || !d4_4_3", "!d4_1_4 || !d4_2_3", "!d4_1_4 || !d4_2_4", "!d4_1_4 || !d4_2_4", "!d4_1_4 || !d4_3_4", "!d4_1_4 || !d4_4_4", "!d4_2_1 || !d4_2_2", "!d4_2_1 || !d4_2_2", "!d4_2_1 || !d4_2_3", "!d4_2_1 || !d4_2_4", "!d4_2_1 || !d4_3_1", "!d4_2_1 || !d4_4_1", "!d4_2_2 || !d4_2_3", "!d4_2_2 || !d4_2_4", "!d4_2_2 || !d4_3_2", "!d4_2_2 || !d4_4_2", "!d4_2_3 || !d4_2_4", "!d4_2_3 || !d4_2_4", "!d4_2_3 || !d4_3_3", "!d4_2_3 || !d4_4_3", "!d4_2_4 || !d4_3_4", "!d4_2_4 || !d4_4_4", "!d4_3_1 || !d4_3_2", "!d4_3_1 || !d4_3_2", "!d4_3_1 || !d4_3_3", "!d4_3_1 || !d4_3_4", "!d4_3_1 || !d4_4_1", "!d4_3_1 || !d4_4_1", "!d4_3_1 || !d4_4_2", "!d4_3_2 || !d4_3_3", "!d4_3_2 || !d4_3_4", "!d4_3_2 || !d4_4_1", "!d4_3_2 || !d4_4_2", "!d4_3_2 || !d4_4_2", "!d4_3_3 || !d4_3_4", "!d4_3_3 || !d4_3_4", "!d4_3_3 || !d4_4_3", "!d4_3_3 || !d4_4_3", "!d4_3_3 || !d4_4_4", "!d4_3_4 || !d4_4_3", "!d4_3_4 || !d4_4_4", "!d4_3_4 || !d4_4_4", "!d4_4_1 || !d4_4_2", "!d4_4_1 || !d4_4_2", "!d4_4_1 || !d4_4_3", "!d4_4_1 || !d4_4_4", "!d4_4_2 || !d4_4_3", "!d4_4_2 || !d4_4_4", "!d4_4_3 || !d4_4_4", "!d4_4_3 || !d4_4_4", "d1_1_1 || d1_1_2 || d1_1_3 || d1_1_4", "d1_1_1 || d1_1_2 || d1_2_1 || d1_2_2", "d1_1_1 || d1_2_1 || d1_3_1 || d1_4_1", "d1_1_1 || d2_1_1 || d3_1_1 || d4_1_1", "d1_1_2 || d1_2_2 || d1_3_2 || d1_4_2", "d1_1_2 || d2_1_2 || d3_1_2 || d4_1_2", "d1_1_3 || d1_1_4 || d1_2_3 || d1_2_4", "d1_1_3 || d1_2_3 || d1_3_3 || d1_4_3", "d1_1_3 || d2_1_3 || d3_1_3 || d4_1_3", "d1_1_4 || d1_2_4 || d1_3_4 || d1_4_4", "d1_1_4 || d2_1_4 || d3_1_4 || d4_1_4", "d1_2_1 || d1_2_2 || d1_2_3 || d1_2_4", "d1_2_1 || d2_2_1 || d3_2_1 || d4_2_1", "d1_2_2 || d2_2_2 || d3_2_2 || d4_2_2", "d1_2_3 || d2_2_3 || d3_2_3 || d4_2_3", "d1_2_4 || d2_2_4 || d3_2_4 || d4_2_4", "d1_3_1 || d1_3_2 || d1_3_3 || d1_3_4", "d1_3_1 || d1_3_2 || d1_4_1 || d1_4_2", "d1_3_1 || d2_3_1 || d3_3_1 || d4_3_1", "d1_3_2 || d2_3_2 || d3_3_2 || d4_3_2", "d1_3_3 || d1_3_4 || d1_4_3 || d1_4_4", "d1_3_3 || d2_3_3 || d3_3_3 || d4_3_3", "d1_3_4 || d2_3_4 || d3_3_4 || d4_3_4", "d1_4_1 || d1_4_2 || d1_4_3 || d1_4_4", "d1_4_1 || d2_4_1 || d3_4_1 || d4_4_1", "d1_4_2 || d2_4_2 || d3_4_2 || d4_4_2", "d1_4_3 || d2_4_3 || d3_4_3 || d4_4_3", "d1_4_4 || d2_4_4 || d3_4_4 || d4_4_4", "d2_1_1 || d2_1_2 || d2_1_3 || d2_1_4", "d2_1_1 || d2_1_2 || d2_2_1 || d2_2_2", "d2_1_1 || d2_2_1 || d2_3_1 || d2_4_1", "d2_1_2 || d2_2_2 || d2_3_2 || d2_4_2", "d2_1_3 || d2_1_4 || d2_2_3 || d2_2_4", "d2_1_3 || d2_2_3 || d2_3_3 || d2_4_3", "d2_1_4 || d2_2_4 || d2_3_4 || d2_4_4", "d2_2_1 || d2_2_2 || d2_2_3 || d2_2_4", "d2_3_1 || d2_3_2 || d2_3_3 || d2_3_4", "d2_3_1 || d2_3_2 || d2_4_1 || d2_4_2", "d2_3_3 || d2_3_4 || d2_4_3 || d2_4_4", "d2_4_1 || d2_4_2 || d2_4_3 || d2_4_4", "d3_1_1 || d3_1_2 || d3_1_3 || d3_1_4", "d3_1_1 || d3_1_2 || d3_2_1 || d3_2_2", "d3_1_1 || d3_2_1 || d3_3_1 || d3_4_1", "d3_1_2 || d3_2_2 || d3_3_2 || d3_4_2", "d3_1_3 || d3_1_4 || d3_2_3 || d3_2_4", "d3_1_3 || d3_2_3 || d3_3_3 || d3_4_3", "d3_1_4 || d3_2_4 || d3_3_4 || d3_4_4", "d3_2_1 || d3_2_2 || d3_2_3 || d3_2_4", "d3_3_1 || d3_3_2 || d3_3_3 || d3_3_4", "d3_3_1 || d3_3_2 || d3_4_1 || d3_4_2", "d3_3_3 || d3_3_4 || d3_4_3 || d3_4_4", "d3_4_1 || d3_4_2 || d3_4_3 || d3_4_4", "d4_1_1 || d4_1_2 || d4_1_3 || d4_1_4", "d4_1_1 || d4_1_2 || d4_2_1 || d4_2_2", "d4_1_1 || d4_2_1 || d4_3_1 || d4_4_1", "d4_1_2 || d4_2_2 || d4_3_2 || d4_4_2", "d4_1_3 || d4_1_4 || d4_2_3 || d4_2_4", "d4_1_3 || d4_2_3 || d4_3_3 || d4_4_3", "d4_1_4 || d4_2_4 || d4_3_4 || d4_4_4", "d4_2_1 || d4_2_2 || d4_2_3 || d4_2_4", "d4_3_1 || d4_3_2 || d4_3_3 || d4_3_4", "d4_3_1 || d4_3_2 || d4_4_1 || d4_4_2", "d4_3_3 || d4_3_4 || d4_4_3 || d4_4_4", "d4_4_1 || d4_4_2 || d4_4_3 || d4_4_4" ] assert '\n'.join(expected) == str(board0.cnf())