import choco.Problem;
import choco.ContradictionException;
import choco.integer.*;
import choco.Constraint;
import choco.Problem;
import choco.Constraint;
import choco.Solver;
import choco.Solution;
import choco.ContradictionException;
import choco.integer.IntVar;

public class Cases3 {

  
  public static void main(String[] args) throws ContradictionException {

     for(int i=0;i<3;i++)
	 for (int j=0;j<3;j++)
	     for(int k=0;k<3;k++)
		 for(int l=0;l<3;l++){
		     Problem pb = new Problem();
		     IntDomainVar xlb  = pb.makeBoundIntVar("x.lb",0,4);
		     IntDomainVar ylb  = pb.makeBoundIntVar("y.lb",0,4);
		     IntDomainVar xupb = pb.makeBoundIntVar("x.upb",0,4);
		     IntDomainVar yupb = pb.makeBoundIntVar("y.upb",0,4);
		     pb.post(pb.leq(xlb,xupb));
		     pb.post(pb.leq(ylb,yupb));
		     if (i==0) pb.post(pb.lt(xlb,ylb));
		     if (i==1) pb.post(pb.eq(xlb,ylb));
		     if (i==2) pb.post(pb.gt(xlb,ylb));
		     if (j==0) pb.post(pb.lt(xlb,yupb));
		     if (j==1) pb.post(pb.eq(xlb,yupb));
		     if (j==2) pb.post(pb.gt(xlb,yupb));
		     if (k==0) pb.post(pb.lt(xupb,ylb));
		     if (k==1) pb.post(pb.eq(xupb,ylb));
		     if (k==2) pb.post(pb.gt(xupb,ylb));
		     if (l==0) pb.post(pb.lt(xupb,yupb));
		     if (l==1) pb.post(pb.eq(xupb,yupb));
		     if (l==2) pb.post(pb.gt(xupb,yupb));

		     boolean solved = true;
		     try {pb.propagate();}
		     catch (Exception e) {solved = false;}
		     if (solved)
			 System.out.println(i + "/" + j + "/" + k + "/" + l + " " +
					    "[" + xlb.getInf() + "/" + xlb.getSup() + "," +
					    xupb.getInf() + "/" + xupb.getSup() + "] " + 
					    "[" + ylb.getInf() + "/" + ylb.getSup() + "," +
					    yupb.getInf() + "/" + yupb.getSup() + "] ");
		 }
  }
}
