base(control(black))
base(control(white))
index(1)
index(2)
index(3)
init(cell(1,1,b))
init(cell(1,2,b))
init(cell(1,3,b))
init(cell(2,1,b))
init(cell(2,2,b))
init(cell(2,3,b))
init(cell(3,1,b))
init(cell(3,2,b))
init(cell(3,3,b))
init(control(white))
role(black)
role(white)
base(cell(1,1,b)) :- index(1) & index(1)
base(cell(1,1,o)) :- index(1) & index(1)
base(cell(1,1,x)) :- index(1) & index(1)
base(cell(1,2,b)) :- index(1) & index(2)
base(cell(1,2,o)) :- index(1) & index(2)
base(cell(1,2,x)) :- index(1) & index(2)
base(cell(1,3,b)) :- index(1) & index(3)
base(cell(1,3,o)) :- index(1) & index(3)
base(cell(1,3,x)) :- index(1) & index(3)
base(cell(2,1,b)) :- index(2) & index(1)
base(cell(2,1,o)) :- index(2) & index(1)
base(cell(2,1,x)) :- index(2) & index(1)
base(cell(2,2,b)) :- index(2) & index(2)
base(cell(2,2,o)) :- index(2) & index(2)
base(cell(2,2,x)) :- index(2) & index(2)
base(cell(2,3,b)) :- index(2) & index(3)
base(cell(2,3,o)) :- index(2) & index(3)
base(cell(2,3,x)) :- index(2) & index(3)
base(cell(3,1,b)) :- index(3) & index(1)
base(cell(3,1,o)) :- index(3) & index(1)
base(cell(3,1,x)) :- index(3) & index(1)
base(cell(3,2,b)) :- index(3) & index(2)
base(cell(3,2,o)) :- index(3) & index(2)
base(cell(3,2,x)) :- index(3) & index(2)
base(cell(3,3,b)) :- index(3) & index(3)
base(cell(3,3,o)) :- index(3) & index(3)
base(cell(3,3,x)) :- index(3) & index(3)
column(1,b) :- true(cell(1,1,b)) & true(cell(2,1,b)) & true(cell(3,1,b))
column(1,o) :- true(cell(1,1,o)) & true(cell(2,1,o)) & true(cell(3,1,o))
column(1,x) :- true(cell(1,1,x)) & true(cell(2,1,x)) & true(cell(3,1,x))
column(2,b) :- true(cell(1,2,b)) & true(cell(2,2,b)) & true(cell(3,2,b))
column(2,o) :- true(cell(1,2,o)) & true(cell(2,2,o)) & true(cell(3,2,o))
column(2,x) :- true(cell(1,2,x)) & true(cell(2,2,x)) & true(cell(3,2,x))
column(3,b) :- true(cell(1,3,b)) & true(cell(2,3,b)) & true(cell(3,3,b))
column(3,o) :- true(cell(1,3,o)) & true(cell(2,3,o)) & true(cell(3,3,o))
column(3,x) :- true(cell(1,3,x)) & true(cell(2,3,x)) & true(cell(3,3,x))
diagonal(b) :- true(cell(1,1,b)) & true(cell(2,2,b)) & true(cell(3,3,b))
diagonal(b) :- true(cell(1,3,b)) & true(cell(2,2,b)) & true(cell(3,1,b))
diagonal(o) :- true(cell(1,1,o)) & true(cell(2,2,o)) & true(cell(3,3,o))
diagonal(o) :- true(cell(1,3,o)) & true(cell(2,2,o)) & true(cell(3,1,o))
diagonal(x) :- true(cell(1,1,x)) & true(cell(2,2,x)) & true(cell(3,3,x))
diagonal(x) :- true(cell(1,3,x)) & true(cell(2,2,x)) & true(cell(3,1,x))
goal(black,0) :- line(x) & ~line(o)
goal(black,100) :- ~line(x) & line(o)
goal(black,50) :- ~line(x) & ~line(o)
goal(white,0) :- ~line(x) & line(o)
goal(white,100) :- line(x) & ~line(o)
goal(white,50) :- ~line(x) & ~line(o)
input(black,mark(1,1)) :- role(black) & index(1) & index(1)
input(black,mark(1,2)) :- role(black) & index(1) & index(2)
input(black,mark(1,3)) :- role(black) & index(1) & index(3)
input(black,mark(2,1)) :- role(black) & index(2) & index(1)
input(black,mark(2,2)) :- role(black) & index(2) & index(2)
input(black,mark(2,3)) :- role(black) & index(2) & index(3)
input(black,mark(3,1)) :- role(black) & index(3) & index(1)
input(black,mark(3,2)) :- role(black) & index(3) & index(2)
input(black,mark(3,3)) :- role(black) & index(3) & index(3)
input(black,noop) :- role(black)
input(white,mark(1,1)) :- role(white) & index(1) & index(1)
input(white,mark(1,2)) :- role(white) & index(1) & index(2)
input(white,mark(1,3)) :- role(white) & index(1) & index(3)
input(white,mark(2,1)) :- role(white) & index(2) & index(1)
input(white,mark(2,2)) :- role(white) & index(2) & index(2)
input(white,mark(2,3)) :- role(white) & index(2) & index(3)
input(white,mark(3,1)) :- role(white) & index(3) & index(1)
input(white,mark(3,2)) :- role(white) & index(3) & index(2)
input(white,mark(3,3)) :- role(white) & index(3) & index(3)
input(white,noop) :- role(white)
legal(black,mark(1,1)) :- true(cell(1,1,b)) & true(control(black))
legal(black,mark(1,2)) :- true(cell(1,2,b)) & true(control(black))
legal(black,mark(1,3)) :- true(cell(1,3,b)) & true(control(black))
legal(black,mark(2,1)) :- true(cell(2,1,b)) & true(control(black))
legal(black,mark(2,2)) :- true(cell(2,2,b)) & true(control(black))
legal(black,mark(2,3)) :- true(cell(2,3,b)) & true(control(black))
legal(black,mark(3,1)) :- true(cell(3,1,b)) & true(control(black))
legal(black,mark(3,2)) :- true(cell(3,2,b)) & true(control(black))
legal(black,mark(3,3)) :- true(cell(3,3,b)) & true(control(black))
legal(black,noop) :- true(control(white))
legal(white,mark(1,1)) :- true(cell(1,1,b)) & true(control(white))
legal(white,mark(1,2)) :- true(cell(1,2,b)) & true(control(white))
legal(white,mark(1,3)) :- true(cell(1,3,b)) & true(control(white))
legal(white,mark(2,1)) :- true(cell(2,1,b)) & true(control(white))
legal(white,mark(2,2)) :- true(cell(2,2,b)) & true(control(white))
legal(white,mark(2,3)) :- true(cell(2,3,b)) & true(control(white))
legal(white,mark(3,1)) :- true(cell(3,1,b)) & true(control(white))
legal(white,mark(3,2)) :- true(cell(3,2,b)) & true(control(white))
legal(white,mark(3,3)) :- true(cell(3,3,b)) & true(control(white))
legal(white,noop) :- true(control(black))
line(b) :- column(1,b)
line(b) :- column(2,b)
line(b) :- column(3,b)
line(b) :- diagonal(b)
line(b) :- row(1,b)
line(b) :- row(2,b)
line(b) :- row(3,b)
line(o) :- column(1,o)
line(o) :- column(2,o)
line(o) :- column(3,o)
line(o) :- diagonal(o)
line(o) :- row(1,o)
line(o) :- row(2,o)
line(o) :- row(3,o)
line(x) :- column(1,x)
line(x) :- column(2,x)
line(x) :- column(3,x)
line(x) :- diagonal(x)
line(x) :- row(1,x)
line(x) :- row(2,x)
line(x) :- row(3,x)
next(cell(1,1,b)) :- does(black,mark(1,2)) & true(cell(1,1,b)) & distinct(1,2)
next(cell(1,1,b)) :- does(black,mark(1,3)) & true(cell(1,1,b)) & distinct(1,3)
next(cell(1,1,b)) :- does(black,mark(2,1)) & true(cell(1,1,b)) & distinct(1,2)
next(cell(1,1,b)) :- does(black,mark(2,2)) & true(cell(1,1,b)) & distinct(1,2)
next(cell(1,1,b)) :- does(black,mark(2,3)) & true(cell(1,1,b)) & distinct(1,2)
next(cell(1,1,b)) :- does(black,mark(2,3)) & true(cell(1,1,b)) & distinct(1,3)
next(cell(1,1,b)) :- does(black,mark(3,1)) & true(cell(1,1,b)) & distinct(1,3)
next(cell(1,1,b)) :- does(black,mark(3,2)) & true(cell(1,1,b)) & distinct(1,2)
next(cell(1,1,b)) :- does(black,mark(3,2)) & true(cell(1,1,b)) & distinct(1,3)
next(cell(1,1,b)) :- does(black,mark(3,3)) & true(cell(1,1,b)) & distinct(1,3)
next(cell(1,1,b)) :- does(white,mark(1,2)) & true(cell(1,1,b)) & distinct(1,2)
next(cell(1,1,b)) :- does(white,mark(1,3)) & true(cell(1,1,b)) & distinct(1,3)
next(cell(1,1,b)) :- does(white,mark(2,1)) & true(cell(1,1,b)) & distinct(1,2)
next(cell(1,1,b)) :- does(white,mark(2,2)) & true(cell(1,1,b)) & distinct(1,2)
next(cell(1,1,b)) :- does(white,mark(2,3)) & true(cell(1,1,b)) & distinct(1,2)
next(cell(1,1,b)) :- does(white,mark(2,3)) & true(cell(1,1,b)) & distinct(1,3)
next(cell(1,1,b)) :- does(white,mark(3,1)) & true(cell(1,1,b)) & distinct(1,3)
next(cell(1,1,b)) :- does(white,mark(3,2)) & true(cell(1,1,b)) & distinct(1,2)
next(cell(1,1,b)) :- does(white,mark(3,2)) & true(cell(1,1,b)) & distinct(1,3)
next(cell(1,1,b)) :- does(white,mark(3,3)) & true(cell(1,1,b)) & distinct(1,3)
next(cell(1,1,o)) :- does(black,mark(1,1)) & true(cell(1,1,b))
next(cell(1,1,o)) :- true(cell(1,1,o)) & distinct(o,b)
next(cell(1,1,x)) :- does(white,mark(1,1)) & true(cell(1,1,b))
next(cell(1,1,x)) :- true(cell(1,1,x)) & distinct(x,b)
next(cell(1,2,b)) :- does(black,mark(1,1)) & true(cell(1,2,b)) & distinct(2,1)
next(cell(1,2,b)) :- does(black,mark(1,3)) & true(cell(1,2,b)) & distinct(2,3)
next(cell(1,2,b)) :- does(black,mark(2,1)) & true(cell(1,2,b)) & distinct(1,2)
next(cell(1,2,b)) :- does(black,mark(2,1)) & true(cell(1,2,b)) & distinct(2,1)
next(cell(1,2,b)) :- does(black,mark(2,2)) & true(cell(1,2,b)) & distinct(1,2)
next(cell(1,2,b)) :- does(black,mark(2,3)) & true(cell(1,2,b)) & distinct(1,2)
next(cell(1,2,b)) :- does(black,mark(2,3)) & true(cell(1,2,b)) & distinct(2,3)
next(cell(1,2,b)) :- does(black,mark(3,1)) & true(cell(1,2,b)) & distinct(1,3)
next(cell(1,2,b)) :- does(black,mark(3,1)) & true(cell(1,2,b)) & distinct(2,1)
next(cell(1,2,b)) :- does(black,mark(3,2)) & true(cell(1,2,b)) & distinct(1,3)
next(cell(1,2,b)) :- does(black,mark(3,3)) & true(cell(1,2,b)) & distinct(1,3)
next(cell(1,2,b)) :- does(black,mark(3,3)) & true(cell(1,2,b)) & distinct(2,3)
next(cell(1,2,b)) :- does(white,mark(1,1)) & true(cell(1,2,b)) & distinct(2,1)
next(cell(1,2,b)) :- does(white,mark(1,3)) & true(cell(1,2,b)) & distinct(2,3)
next(cell(1,2,b)) :- does(white,mark(2,1)) & true(cell(1,2,b)) & distinct(1,2)
next(cell(1,2,b)) :- does(white,mark(2,1)) & true(cell(1,2,b)) & distinct(2,1)
next(cell(1,2,b)) :- does(white,mark(2,2)) & true(cell(1,2,b)) & distinct(1,2)
next(cell(1,2,b)) :- does(white,mark(2,3)) & true(cell(1,2,b)) & distinct(1,2)
next(cell(1,2,b)) :- does(white,mark(2,3)) & true(cell(1,2,b)) & distinct(2,3)
next(cell(1,2,b)) :- does(white,mark(3,1)) & true(cell(1,2,b)) & distinct(1,3)
next(cell(1,2,b)) :- does(white,mark(3,1)) & true(cell(1,2,b)) & distinct(2,1)
next(cell(1,2,b)) :- does(white,mark(3,2)) & true(cell(1,2,b)) & distinct(1,3)
next(cell(1,2,b)) :- does(white,mark(3,3)) & true(cell(1,2,b)) & distinct(1,3)
next(cell(1,2,b)) :- does(white,mark(3,3)) & true(cell(1,2,b)) & distinct(2,3)
next(cell(1,2,o)) :- does(black,mark(1,2)) & true(cell(1,2,b))
next(cell(1,2,o)) :- true(cell(1,2,o)) & distinct(o,b)
next(cell(1,2,x)) :- does(white,mark(1,2)) & true(cell(1,2,b))
next(cell(1,2,x)) :- true(cell(1,2,x)) & distinct(x,b)
next(cell(1,3,b)) :- does(black,mark(1,1)) & true(cell(1,3,b)) & distinct(3,1)
next(cell(1,3,b)) :- does(black,mark(1,2)) & true(cell(1,3,b)) & distinct(3,2)
next(cell(1,3,b)) :- does(black,mark(2,1)) & true(cell(1,3,b)) & distinct(1,2)
next(cell(1,3,b)) :- does(black,mark(2,1)) & true(cell(1,3,b)) & distinct(3,1)
next(cell(1,3,b)) :- does(black,mark(2,2)) & true(cell(1,3,b)) & distinct(1,2)
next(cell(1,3,b)) :- does(black,mark(2,2)) & true(cell(1,3,b)) & distinct(3,2)
next(cell(1,3,b)) :- does(black,mark(2,3)) & true(cell(1,3,b)) & distinct(1,2)
next(cell(1,3,b)) :- does(black,mark(3,1)) & true(cell(1,3,b)) & distinct(1,3)
next(cell(1,3,b)) :- does(black,mark(3,1)) & true(cell(1,3,b)) & distinct(3,1)
next(cell(1,3,b)) :- does(black,mark(3,2)) & true(cell(1,3,b)) & distinct(1,3)
next(cell(1,3,b)) :- does(black,mark(3,2)) & true(cell(1,3,b)) & distinct(3,2)
next(cell(1,3,b)) :- does(black,mark(3,3)) & true(cell(1,3,b)) & distinct(1,3)
next(cell(1,3,b)) :- does(white,mark(1,1)) & true(cell(1,3,b)) & distinct(3,1)
next(cell(1,3,b)) :- does(white,mark(1,2)) & true(cell(1,3,b)) & distinct(3,2)
next(cell(1,3,b)) :- does(white,mark(2,1)) & true(cell(1,3,b)) & distinct(1,2)
next(cell(1,3,b)) :- does(white,mark(2,1)) & true(cell(1,3,b)) & distinct(3,1)
next(cell(1,3,b)) :- does(white,mark(2,2)) & true(cell(1,3,b)) & distinct(1,2)
next(cell(1,3,b)) :- does(white,mark(2,2)) & true(cell(1,3,b)) & distinct(3,2)
next(cell(1,3,b)) :- does(white,mark(2,3)) & true(cell(1,3,b)) & distinct(1,2)
next(cell(1,3,b)) :- does(white,mark(3,1)) & true(cell(1,3,b)) & distinct(1,3)
next(cell(1,3,b)) :- does(white,mark(3,1)) & true(cell(1,3,b)) & distinct(3,1)
next(cell(1,3,b)) :- does(white,mark(3,2)) & true(cell(1,3,b)) & distinct(1,3)
next(cell(1,3,b)) :- does(white,mark(3,2)) & true(cell(1,3,b)) & distinct(3,2)
next(cell(1,3,b)) :- does(white,mark(3,3)) & true(cell(1,3,b)) & distinct(1,3)
next(cell(1,3,o)) :- does(black,mark(1,3)) & true(cell(1,3,b))
next(cell(1,3,o)) :- true(cell(1,3,o)) & distinct(o,b)
next(cell(1,3,x)) :- does(white,mark(1,3)) & true(cell(1,3,b))
next(cell(1,3,x)) :- true(cell(1,3,x)) & distinct(x,b)
next(cell(2,1,b)) :- does(black,mark(1,1)) & true(cell(2,1,b)) & distinct(2,1)
next(cell(2,1,b)) :- does(black,mark(1,2)) & true(cell(2,1,b)) & distinct(1,2)
next(cell(2,1,b)) :- does(black,mark(1,2)) & true(cell(2,1,b)) & distinct(2,1)
next(cell(2,1,b)) :- does(black,mark(1,3)) & true(cell(2,1,b)) & distinct(1,3)
next(cell(2,1,b)) :- does(black,mark(1,3)) & true(cell(2,1,b)) & distinct(2,1)
next(cell(2,1,b)) :- does(black,mark(2,2)) & true(cell(2,1,b)) & distinct(1,2)
next(cell(2,1,b)) :- does(black,mark(2,3)) & true(cell(2,1,b)) & distinct(1,3)
next(cell(2,1,b)) :- does(black,mark(3,1)) & true(cell(2,1,b)) & distinct(2,3)
next(cell(2,1,b)) :- does(black,mark(3,2)) & true(cell(2,1,b)) & distinct(1,2)
next(cell(2,1,b)) :- does(black,mark(3,2)) & true(cell(2,1,b)) & distinct(2,3)
next(cell(2,1,b)) :- does(black,mark(3,3)) & true(cell(2,1,b)) & distinct(1,3)
next(cell(2,1,b)) :- does(black,mark(3,3)) & true(cell(2,1,b)) & distinct(2,3)
next(cell(2,1,b)) :- does(white,mark(1,1)) & true(cell(2,1,b)) & distinct(2,1)
next(cell(2,1,b)) :- does(white,mark(1,2)) & true(cell(2,1,b)) & distinct(1,2)
next(cell(2,1,b)) :- does(white,mark(1,2)) & true(cell(2,1,b)) & distinct(2,1)
next(cell(2,1,b)) :- does(white,mark(1,3)) & true(cell(2,1,b)) & distinct(1,3)
next(cell(2,1,b)) :- does(white,mark(1,3)) & true(cell(2,1,b)) & distinct(2,1)
next(cell(2,1,b)) :- does(white,mark(2,2)) & true(cell(2,1,b)) & distinct(1,2)
next(cell(2,1,b)) :- does(white,mark(2,3)) & true(cell(2,1,b)) & distinct(1,3)
next(cell(2,1,b)) :- does(white,mark(3,1)) & true(cell(2,1,b)) & distinct(2,3)
next(cell(2,1,b)) :- does(white,mark(3,2)) & true(cell(2,1,b)) & distinct(1,2)
next(cell(2,1,b)) :- does(white,mark(3,2)) & true(cell(2,1,b)) & distinct(2,3)
next(cell(2,1,b)) :- does(white,mark(3,3)) & true(cell(2,1,b)) & distinct(1,3)
next(cell(2,1,b)) :- does(white,mark(3,3)) & true(cell(2,1,b)) & distinct(2,3)
next(cell(2,1,o)) :- does(black,mark(2,1)) & true(cell(2,1,b))
next(cell(2,1,o)) :- true(cell(2,1,o)) & distinct(o,b)
next(cell(2,1,x)) :- does(white,mark(2,1)) & true(cell(2,1,b))
next(cell(2,1,x)) :- true(cell(2,1,x)) & distinct(x,b)
next(cell(2,2,b)) :- does(black,mark(1,1)) & true(cell(2,2,b)) & distinct(2,1)
next(cell(2,2,b)) :- does(black,mark(1,2)) & true(cell(2,2,b)) & distinct(2,1)
next(cell(2,2,b)) :- does(black,mark(1,3)) & true(cell(2,2,b)) & distinct(2,1)
next(cell(2,2,b)) :- does(black,mark(1,3)) & true(cell(2,2,b)) & distinct(2,3)
next(cell(2,2,b)) :- does(black,mark(2,1)) & true(cell(2,2,b)) & distinct(2,1)
next(cell(2,2,b)) :- does(black,mark(2,3)) & true(cell(2,2,b)) & distinct(2,3)
next(cell(2,2,b)) :- does(black,mark(3,1)) & true(cell(2,2,b)) & distinct(2,1)
next(cell(2,2,b)) :- does(black,mark(3,1)) & true(cell(2,2,b)) & distinct(2,3)
next(cell(2,2,b)) :- does(black,mark(3,2)) & true(cell(2,2,b)) & distinct(2,3)
next(cell(2,2,b)) :- does(black,mark(3,3)) & true(cell(2,2,b)) & distinct(2,3)
next(cell(2,2,b)) :- does(white,mark(1,1)) & true(cell(2,2,b)) & distinct(2,1)
next(cell(2,2,b)) :- does(white,mark(1,2)) & true(cell(2,2,b)) & distinct(2,1)
next(cell(2,2,b)) :- does(white,mark(1,3)) & true(cell(2,2,b)) & distinct(2,1)
next(cell(2,2,b)) :- does(white,mark(1,3)) & true(cell(2,2,b)) & distinct(2,3)
next(cell(2,2,b)) :- does(white,mark(2,1)) & true(cell(2,2,b)) & distinct(2,1)
next(cell(2,2,b)) :- does(white,mark(2,3)) & true(cell(2,2,b)) & distinct(2,3)
next(cell(2,2,b)) :- does(white,mark(3,1)) & true(cell(2,2,b)) & distinct(2,1)
next(cell(2,2,b)) :- does(white,mark(3,1)) & true(cell(2,2,b)) & distinct(2,3)
next(cell(2,2,b)) :- does(white,mark(3,2)) & true(cell(2,2,b)) & distinct(2,3)
next(cell(2,2,b)) :- does(white,mark(3,3)) & true(cell(2,2,b)) & distinct(2,3)
next(cell(2,2,o)) :- does(black,mark(2,2)) & true(cell(2,2,b))
next(cell(2,2,o)) :- true(cell(2,2,o)) & distinct(o,b)
next(cell(2,2,x)) :- does(white,mark(2,2)) & true(cell(2,2,b))
next(cell(2,2,x)) :- true(cell(2,2,x)) & distinct(x,b)
next(cell(2,3,b)) :- does(black,mark(1,1)) & true(cell(2,3,b)) & distinct(2,1)
next(cell(2,3,b)) :- does(black,mark(1,1)) & true(cell(2,3,b)) & distinct(3,1)
next(cell(2,3,b)) :- does(black,mark(1,2)) & true(cell(2,3,b)) & distinct(2,1)
next(cell(2,3,b)) :- does(black,mark(1,2)) & true(cell(2,3,b)) & distinct(3,2)
next(cell(2,3,b)) :- does(black,mark(1,3)) & true(cell(2,3,b)) & distinct(2,1)
next(cell(2,3,b)) :- does(black,mark(2,1)) & true(cell(2,3,b)) & distinct(3,1)
next(cell(2,3,b)) :- does(black,mark(2,2)) & true(cell(2,3,b)) & distinct(3,2)
next(cell(2,3,b)) :- does(black,mark(3,1)) & true(cell(2,3,b)) & distinct(2,3)
next(cell(2,3,b)) :- does(black,mark(3,1)) & true(cell(2,3,b)) & distinct(3,1)
next(cell(2,3,b)) :- does(black,mark(3,2)) & true(cell(2,3,b)) & distinct(2,3)
next(cell(2,3,b)) :- does(black,mark(3,2)) & true(cell(2,3,b)) & distinct(3,2)
next(cell(2,3,b)) :- does(black,mark(3,3)) & true(cell(2,3,b)) & distinct(2,3)
next(cell(2,3,b)) :- does(white,mark(1,1)) & true(cell(2,3,b)) & distinct(2,1)
next(cell(2,3,b)) :- does(white,mark(1,1)) & true(cell(2,3,b)) & distinct(3,1)
next(cell(2,3,b)) :- does(white,mark(1,2)) & true(cell(2,3,b)) & distinct(2,1)
next(cell(2,3,b)) :- does(white,mark(1,2)) & true(cell(2,3,b)) & distinct(3,2)
next(cell(2,3,b)) :- does(white,mark(1,3)) & true(cell(2,3,b)) & distinct(2,1)
next(cell(2,3,b)) :- does(white,mark(2,1)) & true(cell(2,3,b)) & distinct(3,1)
next(cell(2,3,b)) :- does(white,mark(2,2)) & true(cell(2,3,b)) & distinct(3,2)
next(cell(2,3,b)) :- does(white,mark(3,1)) & true(cell(2,3,b)) & distinct(2,3)
next(cell(2,3,b)) :- does(white,mark(3,1)) & true(cell(2,3,b)) & distinct(3,1)
next(cell(2,3,b)) :- does(white,mark(3,2)) & true(cell(2,3,b)) & distinct(2,3)
next(cell(2,3,b)) :- does(white,mark(3,2)) & true(cell(2,3,b)) & distinct(3,2)
next(cell(2,3,b)) :- does(white,mark(3,3)) & true(cell(2,3,b)) & distinct(2,3)
next(cell(2,3,o)) :- does(black,mark(2,3)) & true(cell(2,3,b))
next(cell(2,3,o)) :- true(cell(2,3,o)) & distinct(o,b)
next(cell(2,3,x)) :- does(white,mark(2,3)) & true(cell(2,3,b))
next(cell(2,3,x)) :- true(cell(2,3,x)) & distinct(x,b)
next(cell(3,1,b)) :- does(black,mark(1,1)) & true(cell(3,1,b)) & distinct(3,1)
next(cell(3,1,b)) :- does(black,mark(1,2)) & true(cell(3,1,b)) & distinct(1,2)
next(cell(3,1,b)) :- does(black,mark(1,2)) & true(cell(3,1,b)) & distinct(3,1)
next(cell(3,1,b)) :- does(black,mark(1,3)) & true(cell(3,1,b)) & distinct(1,3)
next(cell(3,1,b)) :- does(black,mark(1,3)) & true(cell(3,1,b)) & distinct(3,1)
next(cell(3,1,b)) :- does(black,mark(2,1)) & true(cell(3,1,b)) & distinct(3,2)
next(cell(3,1,b)) :- does(black,mark(2,2)) & true(cell(3,1,b)) & distinct(1,2)
next(cell(3,1,b)) :- does(black,mark(2,2)) & true(cell(3,1,b)) & distinct(3,2)
next(cell(3,1,b)) :- does(black,mark(2,3)) & true(cell(3,1,b)) & distinct(1,3)
next(cell(3,1,b)) :- does(black,mark(2,3)) & true(cell(3,1,b)) & distinct(3,2)
next(cell(3,1,b)) :- does(black,mark(3,2)) & true(cell(3,1,b)) & distinct(1,2)
next(cell(3,1,b)) :- does(black,mark(3,3)) & true(cell(3,1,b)) & distinct(1,3)
next(cell(3,1,b)) :- does(white,mark(1,1)) & true(cell(3,1,b)) & distinct(3,1)
next(cell(3,1,b)) :- does(white,mark(1,2)) & true(cell(3,1,b)) & distinct(1,2)
next(cell(3,1,b)) :- does(white,mark(1,2)) & true(cell(3,1,b)) & distinct(3,1)
next(cell(3,1,b)) :- does(white,mark(1,3)) & true(cell(3,1,b)) & distinct(1,3)
next(cell(3,1,b)) :- does(white,mark(1,3)) & true(cell(3,1,b)) & distinct(3,1)
next(cell(3,1,b)) :- does(white,mark(2,1)) & true(cell(3,1,b)) & distinct(3,2)
next(cell(3,1,b)) :- does(white,mark(2,2)) & true(cell(3,1,b)) & distinct(1,2)
next(cell(3,1,b)) :- does(white,mark(2,2)) & true(cell(3,1,b)) & distinct(3,2)
next(cell(3,1,b)) :- does(white,mark(2,3)) & true(cell(3,1,b)) & distinct(1,3)
next(cell(3,1,b)) :- does(white,mark(2,3)) & true(cell(3,1,b)) & distinct(3,2)
next(cell(3,1,b)) :- does(white,mark(3,2)) & true(cell(3,1,b)) & distinct(1,2)
next(cell(3,1,b)) :- does(white,mark(3,3)) & true(cell(3,1,b)) & distinct(1,3)
next(cell(3,1,o)) :- does(black,mark(3,1)) & true(cell(3,1,b))
next(cell(3,1,o)) :- true(cell(3,1,o)) & distinct(o,b)
next(cell(3,1,x)) :- does(white,mark(3,1)) & true(cell(3,1,b))
next(cell(3,1,x)) :- true(cell(3,1,x)) & distinct(x,b)
next(cell(3,2,b)) :- does(black,mark(1,1)) & true(cell(3,2,b)) & distinct(2,1)
next(cell(3,2,b)) :- does(black,mark(1,1)) & true(cell(3,2,b)) & distinct(3,1)
next(cell(3,2,b)) :- does(black,mark(1,2)) & true(cell(3,2,b)) & distinct(3,1)
next(cell(3,2,b)) :- does(black,mark(1,3)) & true(cell(3,2,b)) & distinct(2,3)
next(cell(3,2,b)) :- does(black,mark(1,3)) & true(cell(3,2,b)) & distinct(3,1)
next(cell(3,2,b)) :- does(black,mark(2,1)) & true(cell(3,2,b)) & distinct(2,1)
next(cell(3,2,b)) :- does(black,mark(2,1)) & true(cell(3,2,b)) & distinct(3,2)
next(cell(3,2,b)) :- does(black,mark(2,2)) & true(cell(3,2,b)) & distinct(3,2)
next(cell(3,2,b)) :- does(black,mark(2,3)) & true(cell(3,2,b)) & distinct(2,3)
next(cell(3,2,b)) :- does(black,mark(2,3)) & true(cell(3,2,b)) & distinct(3,2)
next(cell(3,2,b)) :- does(black,mark(3,1)) & true(cell(3,2,b)) & distinct(2,1)
next(cell(3,2,b)) :- does(black,mark(3,3)) & true(cell(3,2,b)) & distinct(2,3)
next(cell(3,2,b)) :- does(white,mark(1,1)) & true(cell(3,2,b)) & distinct(2,1)
next(cell(3,2,b)) :- does(white,mark(1,1)) & true(cell(3,2,b)) & distinct(3,1)
next(cell(3,2,b)) :- does(white,mark(1,2)) & true(cell(3,2,b)) & distinct(3,1)
next(cell(3,2,b)) :- does(white,mark(1,3)) & true(cell(3,2,b)) & distinct(2,3)
next(cell(3,2,b)) :- does(white,mark(1,3)) & true(cell(3,2,b)) & distinct(3,1)
next(cell(3,2,b)) :- does(white,mark(2,1)) & true(cell(3,2,b)) & distinct(2,1)
next(cell(3,2,b)) :- does(white,mark(2,1)) & true(cell(3,2,b)) & distinct(3,2)
next(cell(3,2,b)) :- does(white,mark(2,2)) & true(cell(3,2,b)) & distinct(3,2)
next(cell(3,2,b)) :- does(white,mark(2,3)) & true(cell(3,2,b)) & distinct(2,3)
next(cell(3,2,b)) :- does(white,mark(2,3)) & true(cell(3,2,b)) & distinct(3,2)
next(cell(3,2,b)) :- does(white,mark(3,1)) & true(cell(3,2,b)) & distinct(2,1)
next(cell(3,2,b)) :- does(white,mark(3,3)) & true(cell(3,2,b)) & distinct(2,3)
next(cell(3,2,o)) :- does(black,mark(3,2)) & true(cell(3,2,b))
next(cell(3,2,o)) :- true(cell(3,2,o)) & distinct(o,b)
next(cell(3,2,x)) :- does(white,mark(3,2)) & true(cell(3,2,b))
next(cell(3,2,x)) :- true(cell(3,2,x)) & distinct(x,b)
next(cell(3,3,b)) :- does(black,mark(1,1)) & true(cell(3,3,b)) & distinct(3,1)
next(cell(3,3,b)) :- does(black,mark(1,2)) & true(cell(3,3,b)) & distinct(3,1)
next(cell(3,3,b)) :- does(black,mark(1,2)) & true(cell(3,3,b)) & distinct(3,2)
next(cell(3,3,b)) :- does(black,mark(1,3)) & true(cell(3,3,b)) & distinct(3,1)
next(cell(3,3,b)) :- does(black,mark(2,1)) & true(cell(3,3,b)) & distinct(3,1)
next(cell(3,3,b)) :- does(black,mark(2,1)) & true(cell(3,3,b)) & distinct(3,2)
next(cell(3,3,b)) :- does(black,mark(2,2)) & true(cell(3,3,b)) & distinct(3,2)
next(cell(3,3,b)) :- does(black,mark(2,3)) & true(cell(3,3,b)) & distinct(3,2)
next(cell(3,3,b)) :- does(black,mark(3,1)) & true(cell(3,3,b)) & distinct(3,1)
next(cell(3,3,b)) :- does(black,mark(3,2)) & true(cell(3,3,b)) & distinct(3,2)
next(cell(3,3,b)) :- does(white,mark(1,1)) & true(cell(3,3,b)) & distinct(3,1)
next(cell(3,3,b)) :- does(white,mark(1,2)) & true(cell(3,3,b)) & distinct(3,1)
next(cell(3,3,b)) :- does(white,mark(1,2)) & true(cell(3,3,b)) & distinct(3,2)
next(cell(3,3,b)) :- does(white,mark(1,3)) & true(cell(3,3,b)) & distinct(3,1)
next(cell(3,3,b)) :- does(white,mark(2,1)) & true(cell(3,3,b)) & distinct(3,1)
next(cell(3,3,b)) :- does(white,mark(2,1)) & true(cell(3,3,b)) & distinct(3,2)
next(cell(3,3,b)) :- does(white,mark(2,2)) & true(cell(3,3,b)) & distinct(3,2)
next(cell(3,3,b)) :- does(white,mark(2,3)) & true(cell(3,3,b)) & distinct(3,2)
next(cell(3,3,b)) :- does(white,mark(3,1)) & true(cell(3,3,b)) & distinct(3,1)
next(cell(3,3,b)) :- does(white,mark(3,2)) & true(cell(3,3,b)) & distinct(3,2)
next(cell(3,3,o)) :- does(black,mark(3,3)) & true(cell(3,3,b))
next(cell(3,3,o)) :- true(cell(3,3,o)) & distinct(o,b)
next(cell(3,3,x)) :- does(white,mark(3,3)) & true(cell(3,3,b))
next(cell(3,3,x)) :- true(cell(3,3,x)) & distinct(x,b)
next(control(black)) :- true(control(white))
next(control(white)) :- true(control(black))
open :- true(cell(1,1,b))
open :- true(cell(1,2,b))
open :- true(cell(1,3,b))
open :- true(cell(2,1,b))
open :- true(cell(2,2,b))
open :- true(cell(2,3,b))
open :- true(cell(3,1,b))
open :- true(cell(3,2,b))
open :- true(cell(3,3,b))
row(1,b) :- true(cell(1,1,b)) & true(cell(1,2,b)) & true(cell(1,3,b))
row(1,o) :- true(cell(1,1,o)) & true(cell(1,2,o)) & true(cell(1,3,o))
row(1,x) :- true(cell(1,1,x)) & true(cell(1,2,x)) & true(cell(1,3,x))
row(2,b) :- true(cell(2,1,b)) & true(cell(2,2,b)) & true(cell(2,3,b))
row(2,o) :- true(cell(2,1,o)) & true(cell(2,2,o)) & true(cell(2,3,o))
row(2,x) :- true(cell(2,1,x)) & true(cell(2,2,x)) & true(cell(2,3,x))
row(3,b) :- true(cell(3,1,b)) & true(cell(3,2,b)) & true(cell(3,3,b))
row(3,o) :- true(cell(3,1,o)) & true(cell(3,2,o)) & true(cell(3,3,o))
row(3,x) :- true(cell(3,1,x)) & true(cell(3,2,x)) & true(cell(3,3,x))
terminal :- line(o)
terminal :- line(x)
terminal :- ~open
